diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..46170c611 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,310 @@ +# Agent Guidelines for gramps-project/addons-source + +This document specifies rules and conventions that agents should follow when +making changes to this repository. + +For the normative addon rules — MUST / SHOULD / MAY, with the origin of +each rule (upstream PR, maintainer ruling, Mantis id) cited inline — see +[docs/addon-development/16-guidelines.md](docs/addon-development/16-guidelines.md) +from the Addon Development manual (PR 994). This document covers the +hands-on agent workflow around those rules. + +## Repository Overview + +`addons-source` holds the source code for third-party Gramps addons — +gramplets, views, tools, reports, importers/exporters, filter rules, database +backends, and other plugins that are not part of Gramps core. It is one of +three tightly-linked repositories: + +- **`gramps`** — Gramps core (the application these addons plug into). +- **`addons-source`** (this repo) — addon source code, developed here. +- **`addons`** — built `.addon.tgz` packages and listing JSON consumed by the + in-app Plugin Manager. Populated from this repo via `make.py`; not edited + by hand except by the maintainer doing a release build. + +There is no unified build or CI pipeline for the whole repo (the checked-in +`.travis.yml` is stale/unused) — each addon is largely independent. + +## Branch Model + +Branches are per Gramps major or feature release, e.g. `maintenance/gramps60`, +`maintenance/gramps61` — not one branch per patch release. **Almost all addon +work should target the maintenance branch matching the current released +Gramps version.** A `master` branch exists but is not currently used for +addon work. + +Pick the branch carefully: +- When creating a new addon or fixing an existing one, branch from + `origin/maintenance/gramps6X` (the current release line), not from a local + tracking branch that may carry unrelated WIP commits. +- When opening the PR, target that same branch on + `gramps-project/addons-source`. +- Before pushing, sync/rebase against upstream (`git pull --rebase`) so the + PR applies cleanly. + +All PRs must come from a personal fork, never from a branch pushed directly +to `gramps-project/addons-source` (see `CONTRIBUTING.md`, "Commit Your +Changes": "you want to put your changes into _your_ fork, _not_ the upstream +`gramps-project/addons-source` repository"). + +Weblate translation PRs are the one exception where commits must **not** be +squashed on merge; everything else can be merged/rebased normally. + +## Repository Layout + +Each addon is a single top-level directory, CamelCase-named to match its +Python import name (e.g. `FilterRules/`, `DataEntryGramplet/`). A directory +typically contains: + +- `AddonName.py` — the implementation. +- `AddonName.gpr.py` — the Gramps plugin registration file (required; see + below). +- `po/` — translation `.po` files, managed by `make.py`. +- `tests/` — optional unit tests (see Testing below). +- `MANIFEST` — optional; lists extra files (docs, data) to include in the + built package beyond the default `*.py`, `*.glade`, `*.xml`, `*.txt`, + `locale/*/LC_MESSAGES/*.mo`. +- `locale/` — generated `.mo` files; not something you hand-edit. + +Addon directories generally have **no `__init__.py`** (they rely on Python 3 +namespace packages) so that Gramps can add each one to `sys.path` at load +time and other addons can `import AddonName` directly. + +## Commands + +Addon packaging/translation tasks go through `make.py`, run from the repo +root. Point `GRAMPSPATH` at wherever *your* local Gramps checkout lives (it +defaults to `../../..`, i.e. it assumes `make.py` is being invoked from one +level inside a sibling-layout workspace — don't rely on that default, always +set it explicitly), and make sure that checkout has the matching branch +checked out too (e.g. `maintenance/gramps61` in core when building against +`gramps61` here). Setting `LANGUAGE=en_US.UTF-8` is no longer required on +Gramps v6.0 and later: + +```bash +GRAMPSPATH=/path/to/your/gramps python3 make.py gramps61 build AddonDirectory +``` + +Common subcommands (first positional arg is the branch/version tag, e.g. +`gramps61`): + +- `init AddonDirectory [lang]` — scaffold dirs / `.pot` for a new addon, or + an initial `po/-local.po`. +- `update AddonDirectory ` — refresh a language `.po` from the `.pot`. +- `compile [AddonDirectory|all]` — compile `.po` → `.mo`. +- `build [AddonDirectory|all]` — produce the downloadable `.addon.tgz`. +- `listing [AddonDirectory|all]` — generate/update the Plugin Manager + listing JSON. +- `clean AddonDirectory` — strip generated files (`locale/`, `*.pot`, etc.) + before committing. +- `manifest-check` — validate `MANIFEST` files. +- `as-needed` — build/list/clean only what's out of date, repo-wide. + +Unlike `GRAMPSPATH`, the `build`/`listing`/`check` subcommands write to a +**hardcoded relative path**, `../addons//...` — this isn't a +convention, it's how `make.py` itself resolves the output location, so it +only works if you've cloned the `addons` repo as a sibling of +`addons-source` (see `MAINTAINERS.md` for the recommended three-repo +workspace layout: `gramps` / `addons` / `addons-source` side by side). You +don't need that sibling checkout at all unless you're packaging/publishing +an addon. + +You do not need `make.py` just to write/test an addon's Python code — only +when packaging, translating, or updating the listing. + +## Testing + +Not every addon has tests, but when adding or fixing one, add regression +tests under `AddonName/tests/`, mirroring existing examples (`Form/tests/`, +`DataEntryGramplet/tests/`, `Sqlite/tests/`, `FilterRules/tests/`). + +Conventions here differ from Gramps core: + +- Test files are named `test_*.py` (pytest-style), **not** the `*_test.py` + suffix core Gramps uses — `unittest discover` here is invoked per-addon or + from the repo root without the core `-p "*_test.py"` pattern. +- Still use the `unittest` framework (`unittest.TestCase`), not `pytest` + APIs, even though filenames follow the `test_*.py` convention. +- `AddonName/tests/__init__.py` should be **empty**. Do not add + `gi.require_version(...)` pinning there or in individual test modules — + see GTK/GDK below. +- Because the addon directory has no `__init__.py`, test modules need a + `sys.path` hack to import it as a namespace package: + + ```python + ADDON_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + if ADDON_DIR not in sys.path: + sys.path.insert(0, ADDON_DIR) + ``` + + then `from AddonName.addonmodule import SomeClass`. +- Build test data programmatically against a real (temp-dir) database rather + than relying on fixtures that don't exist in this repo: + + ```python + from gramps.gen.db.utils import make_database + from gramps.gen.db import DbTxn + + db = make_database("sqlite") + db.load(tempfile.mkdtemp(prefix="myaddon_")) + with DbTxn("build test db", db) as txn: + ... + ``` +- If a test needs `gramps.gen.filters.CustomFilters`, call + `reload_custom_filters()` **before** importing the `CustomFilters` name + from `gramps.gen.filters` — that function rebinds the module-level global + rather than mutating it in place, so importing the name first leaves you + with a stale `None`. + +### GTK / GDK version pinning + +The repo-root `tests/__init__.py` pins `gi.require_version("Gtk", "3.0")` and +`gi.require_version("Gdk", "3.0")` for the whole test suite (added in PR +#950). `gi.require_version` sets process-global state, so **individual addon +test files should not re-pin GTK/GDK** — that's now redundant. A new test +module that imports something pulling in `gramps.gui.*` (which happens at +import time for most GUI-facing addons) only needs a guard for hosts with no +PyGObject at all: + +```python +try: + import gi +except ImportError as err: + raise unittest.SkipTest("PyGObject not available: %s" % err) +``` + +Do not add `gi.require_version(...)` calls back into new test files — if you +see them in an addon you're touching, they're safe to remove as redundant +(see the `Themes` addon's `tests/__init__.py` cleanup for precedent), but +don't remove them from files you aren't otherwise changing. + +### Running tests + +```bash +export GRAMPS_RESOURCES=/path/to/gramps/build/share # built Gramps checkout +export GDK_BACKEND=- +python3 -m unittest AddonName.tests.test_something -v +``` + +Run from the `addons-source` repo root so the addon's namespace package +resolves. + +## Windows Development + +Per `CONTRIBUTING.md`, addons here are developed and tested primarily on +Linux; Windows and macOS are possible but far less thoroughly reviewed. +"Windows" itself covers two different things agents should not conflate: + +- **MSYS2** — the POSIX-like shell/toolchain environment Gramps's own + Windows installer is built with. A shell running inside MSYS2 behaves like + a Linux shell (`bash`, POSIX paths) and can run this repo's `make.py` and + `unittest` invocations normally. +- **Native Windows** — a bare `cmd.exe` or PowerShell host with no MSYS2 or + WSL layer underneath. The commands and paths used elsewhere in this + document (`make.py`, `python3 -m unittest ...`, the `GRAMPSPATH` / + `GRAMPS_RESOURCES` env vars) assume a POSIX shell and are not verified + against native `cmd`/PowerShell. + +If you are running as an agent on a native Windows host: + +- Reading, writing, and refactoring addon Python code is fine — the code + itself is portable. +- Do not run this repo's tests or `make.py` directly in `cmd`/PowerShell and + report the result as a real pass/fail — the tooling isn't validated there, + so a failure may be environmental noise rather than an actual regression. +- Ask the user to run the same command inside an MSYS2 shell, WSL, or a + Linux container/VM and share the output, rather than guessing at the + result yourself. + +If you're already inside MSYS2 or WSL, treat it as a POSIX shell and follow +the rest of this document (Commands, Testing) as written. + +## Code Style + +- Every new `.py` file needs the same GPL-2.0-or-later header with copyright + used throughout Gramps core. +- Group imports under comment-banner sections (`Standard Python modules`, + `GTK/Gnome modules`, `Gramps modules`), matching the style already used + across this repo (e.g. `FilterRules/isfamilyfiltermatchevent.py`). +- [Black](https://black.readthedocs.io/) formatting is not currently required + for addons — there's no checked-in CI workflow enforcing it here, though + that may change in the future. The existing codebase is largely + Black-formatted, so running `black ` on files you're already + touching is a reasonable default. +- Docstrings: concise; full Sphinx `:param:`/`:returns:` style only when the + parameters aren't already obvious from the signature. + +## Internationalization + +Addons manage their own translations, separately from Gramps core, though +both go through the same Weblate instance: strings already translated in +Gramps core are matched first, so those strings are excluded from the +Weblate _Addons_ component and don't need separate translation there. At the +top of an addon's main module: + +```python +from gramps.gen.const import GRAMPS_LOCALE as glocale + +try: + _trans = glocale.get_addon_translator(__file__) +except ValueError: + _trans = glocale.translation +_ = _trans.gettext +``` + +(`get_addon_translator` raises `ValueError` if the addon has no +`locale/` translations yet — fall back to the core translator rather than +letting the import crash.) Use `ngettext(singular, plural, n)` instead of a +single `_()` call for any string that counts a noun, for the same reason as +Gramps core: many languages have plural rules English doesn't, and only +`ngettext` lets gettext apply the target language's actual rule. + +## Plugin Registration (`.gpr.py`) + +Every addon needs an `AddonName.gpr.py` alongside `AddonName.py`: + +```python +register( + RULE, # or TOOL, GRAMPLET, REPORT, VIEW, GENERAL, IMPORT, EXPORT, ... + id="uniqueid", + name=_("Human-Readable Name"), + description=_("What it does."), + version="1.0.0", + gramps_target_version="6.1", + status=STABLE, # or UNSTABLE + fname="AddonName.py", + authors=["Author Name"], + authors_email=["author@example.com"], + maintainers=["Maintainer Name"], + maintainers_email=["maintainer@example.com"], + help_url="Addon:WikiPageName", + ... # PTYPE-specific attributes, e.g. ruleclass/namespace for RULE +) +``` + +`gramps_target_version` and `version` are required. `help_url` should point +at the addon's Gramps wiki page (`Addon:PageName`), not a GitHub URL. +`maintainers`/`maintainers_email` identify who currently maintains the +addon and may differ from `authors`/`authors_email` (the original author) +once upkeep passes to someone else. + +> **Do not manually change `version` in a PR.** The `MAJOR.MINOR.PATCH` +> version in `.gpr.py` is bumped automatically by the `addons` repo's +> packaging build (`make.py`) when a change is released — the patch +> component increments on its own. Hand-editing it in a source PR just +> creates spurious diffs and can conflict with what the release build +> assigns; leave it as-is unless you're intentionally doing a MAJOR/MINOR +> bump for a breaking addon change. + +## Bug Reports and Commit Messages + +Bugs against addons are tracked in two places: the shared +[Gramps Mantis BT](https://gramps-project.org/bugs/view_all_bug_page.php) +and, informally, the [Gramps Discourse forum](https://gramps.discourse.group/) +— many addon issues start as a discourse thread rather than a Mantis report. +Unlike Gramps core, this repo has no automated changelog tooling parsing +commit messages, so there's no required `Fixes #N` keyword syntax — just +describe *why* the change was made, and link whatever report (Mantis bug or +discourse URL) motivated it if one exists. Don't invent a Mantis bug number +if you only have a discourse link or user report — link what you actually +have. diff --git a/AncestryTableReport/po/da-local.po b/AncestryTableReport/po/da-local.po index 48f7eb7cd..5ac8b170a 100644 --- a/AncestryTableReport/po/da-local.po +++ b/AncestryTableReport/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-11 20:51+0100\n" -"PO-Revision-Date: 2025-09-30 08:02+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,10 +12,88 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.14-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "Ancestry Table" +msgstr "Anetabel" + +msgid "Produces a table of ancestry about a person" +msgstr "Danner en anetabel for en person" + +#, python-format +msgid "Person %(name)s is not in the Database" +msgstr "Personen %(name)s findes ikke i databasen" + +#, python-format +msgid "Ancestry Table Report for %(name)s" +msgstr "Anetabel rapport for %(name)s" + +#, python-format +msgid "Generation %(gen_number)d" +msgstr "Generation %(gen_number)d" + +#, python-format +msgid "Number of Ancestors for %(name)s" +msgstr "Antal aner for %(name)s" msgid "Generation" msgstr "Generation" +msgid "To start a new page after each generation." +msgstr "At begynde en ny side efter hver generation." + +msgid "Number of ancestors per generation" +msgstr "Antal aner pr generation" + +msgid "Add a page with tne number of ancestors per generation." +msgstr "Tilføj en side med antallet aner per generation." + +msgid "Mask the name of the calendar in the dates" +msgstr "Skjul kalendernavnet i datoerne" + +msgid "" +"By default, except for gregorian dates, Gramps shows the name of the " +"calendar in the dates." +msgstr "" +"Som standard viser Gramps navnet på kalenderen i datoerne, bortset fra " +"gregorianske datoer." + msgid "The style used for the title of the report." msgstr "Stilen der benyttes til rapportens titel." + +msgid "The style used for the Sosa number of the paternal branch." +msgstr "Stilen der benyttes til Sosa-nummeret for faderens linje." + +msgid "The style used for the Sosa number of the maternal branch." +msgstr "Stilen der benyttes til Sosa-nummeret for moderens linje." + +msgid "The style used for the data of the males." +msgstr "Stilen der benyttes for mændenes data." + +msgid "The style used for the data of the females." +msgstr "Stilen de benyttes for kvindernes data." + +msgid "The style used for the marriage." +msgstr "Stilen der benyttes for ægteskabet." + +msgid "" +"The style used for an empty row.\n" +"To enlarge the height of the empty row, just increse the size of the police." +msgstr "" +"Stilen der benyttes for en tom rækker.\n" +"For at forøge højden på den tomme række, øg simpelthen størrelsen på tegnene." + +msgid "" +"The style used for the header table of the number of ancestors per " +"generation." +msgstr "" +"Stilen der benyttes til overskiften i tabellen over antallet af aner per " +"generation." + +msgid "The style used for the number of ancestors per generation." +msgstr "Stilen der benyttes til antallet af aner per generation." + +msgid "" +"The style used for the total line of the number of ancestors per generation." +msgstr "" +"Stilen der benyttes til totallinjen af antallet af aner per generation." diff --git a/AncestryTableReport/po/fi-local.po b/AncestryTableReport/po/fi-local.po index 65d8d92f0..c11092362 100644 --- a/AncestryTableReport/po/fi-local.po +++ b/AncestryTableReport/po/fi-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-11 20:51+0100\n" -"PO-Revision-Date: 2026-04-20 04:09+0000\n" -"Last-Translator: Matti Niemelä \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -12,14 +12,86 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" msgid "Ancestry Table" msgstr "Sukutaulu" +msgid "Produces a table of ancestry about a person" +msgstr "Listaa henkilön esi-isät" + +#, python-format +msgid "Person %(name)s is not in the Database" +msgstr "Henkilöä %(name)s ei ole tietokannassa" + +#, python-format +msgid "Ancestry Table Report for %(name)s" +msgstr "Henkilön %(name)s esi-isäraportti" + +#, python-format +msgid "Generation %(gen_number)d" +msgstr "Sukupolvi %(sukupolvien_numero)d" + +#, python-format +msgid "Number of Ancestors for %(name)s" +msgstr "Henkilön %(name)s löydettyjen esi-isien määrä" + msgid "Generation" msgstr "Sukupolvi" +msgid "To start a new page after each generation." +msgstr "Aloita uusi sivu jokaisen sukupolven jälkeen." + +msgid "Number of ancestors per generation" +msgstr "Esivanhempien lukumäärä sukupolvea kohden" + +msgid "Add a page with tne number of ancestors per generation." +msgstr "Lisää sivu, jossa on esi-isien lukumäärä sukupolvea kohden." + +msgid "Mask the name of the calendar in the dates" +msgstr "Älä näytä kalenterin nimeä päivämäärien yhteydessä" + +msgid "" +"By default, except for gregorian dates, Gramps shows the name of the " +"calendar in the dates." +msgstr "" +"Oletusarvoisesti Gramps näyttää kalenterin nimen päivämäärissä, lukuun " +"ottamatta gregoriaanisia päivämääriä." + msgid "The style used for the title of the report." msgstr "Raportin otsikon tyyli." + +msgid "The style used for the Sosa number of the paternal branch." +msgstr "Isänhaaran Sosa-numerossa käytetty tyyli." + +msgid "The style used for the Sosa number of the maternal branch." +msgstr "Äitihaaran Sosa-numerossa käytetty tyyli." + +msgid "The style used for the data of the males." +msgstr "Miesten tiedossa käytetty tyyli." + +msgid "The style used for the data of the females." +msgstr "Naisten tiedoissa käytetty tyyli." + +msgid "The style used for the marriage." +msgstr "Avioliitossa käytetty tyyli." + +msgid "" +"The style used for an empty row.\n" +"To enlarge the height of the empty row, just increse the size of the police." +msgstr "" +"Tyhjän rivin tyyli.\n" +"Suurenna korkeutta lisäämällä fonttikokoa." + +msgid "" +"The style used for the header table of the number of ancestors per " +"generation." +msgstr "Sukupolven esi-isien lukumäärän otsikossa käytetty tyyli." + +msgid "The style used for the number of ancestors per generation." +msgstr "Sukupolven esi-isien lukuäärän tyyli." + +msgid "" +"The style used for the total line of the number of ancestors per generation." +msgstr "Sukupolven esi-isien määrän tyyli." diff --git a/AncestryTableReport/po/tr-local.po b/AncestryTableReport/po/tr-local.po index 70938488c..6f43e97e0 100644 --- a/AncestryTableReport/po/tr-local.po +++ b/AncestryTableReport/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-05-30 20:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.6.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -79,6 +79,14 @@ msgstr "Kadınların verileri için kullanılan stil." msgid "The style used for the marriage." msgstr "Evlilik için kullanılan stil." +msgid "" +"The style used for an empty row.\n" +"To enlarge the height of the empty row, just increse the size of the police." +msgstr "" +"Boş satır için kullanılan stil.\n" +"Boş satırın yüksekliğini artırmak için yazı tipi boyutunu artırmanız " +"yeterlidir." + msgid "" "The style used for the header table of the number of ancestors per " "generation." diff --git a/AnniversariesGramplet/po/da-local.po b/AnniversariesGramplet/po/da-local.po new file mode 100644 index 000000000..bf191fdfb --- /dev/null +++ b/AnniversariesGramplet/po/da-local.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" +"Last-Translator: Kaj Arne Mikkelsen \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "Double-click on a row to edit the event." +msgstr "Dobbeltklik på en række for at redigere den valgte begivenhed." + +msgid "Participant" +msgstr "Deltager" + +msgid "Anniversaries" +msgstr "Årsdage" + +msgid "A gramplet that displays the anniversaries of events" +msgstr "En gramplet der viser årsdage for begivenheder" diff --git a/AnniversariesGramplet/po/es-local.po b/AnniversariesGramplet/po/es-local.po new file mode 100644 index 000000000..cd99bf89e --- /dev/null +++ b/AnniversariesGramplet/po/es-local.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Project-Id-Version: GRAMPS 3.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-24 05:14+0000\n" +"Last-Translator: Juan Saavedra \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" + +msgid "Double-click on a row to edit the event." +msgstr "Haga doble clic sobre una fila para editar el evento." + +msgid "Participant" +msgstr "Participante" + +msgid "Anniversaries" +msgstr "Aniversarios" + +msgid "A gramplet that displays the anniversaries of events" +msgstr "Un gramplete que muestra los aniversarios de eventos" diff --git a/AnniversariesGramplet/po/fi-local.po b/AnniversariesGramplet/po/fi-local.po new file mode 100644 index 000000000..a251add3c --- /dev/null +++ b/AnniversariesGramplet/po/fi-local.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Project-Id-Version: fi\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" +"Generated-By: pygettext.py 1.4\n" + +msgid "Double-click on a row to edit the event." +msgstr "Muokkaa tapahtumaa kaksoisnapsauttamalla riviä." + +msgid "Participant" +msgstr "Osallistuja" + +msgid "Anniversaries" +msgstr "Merkkipäivät" + +msgid "A gramplet that displays the anniversaries of events" +msgstr "Gramplet, joka näyttää tapahtumien vuosipäivät" diff --git a/ArchiveAssist/ArchiveAssist.py b/ArchiveAssist/ArchiveAssist.py index 83f2aef86..ed581cab5 100644 --- a/ArchiveAssist/ArchiveAssist.py +++ b/ArchiveAssist/ArchiveAssist.py @@ -94,7 +94,7 @@ def parse_ref(text: str) -> dict: match = pattern.search(text) if not match: return {} - + archive = match.group("archive").strip() to_remove = ["kyrkoarkiv", "stadsarkiv"] for word in to_remove: @@ -127,7 +127,7 @@ def parse_ref(text: str) -> dict: # Gramplet class # ------------------------ class ArchiveAssist(Gramplet): - + # I am bad at GUI. Double check... def init(self): if getattr(self, "_initialized", False): @@ -170,7 +170,7 @@ def build_gui(self): vbox.pack_start(self.status_label, False, False, 0) return vbox - + def get_or_create_repository(self, name, trans): for handle in self.dbstate.db.get_repository_handles(): repo = self.dbstate.db.get_repository_from_handle(handle) @@ -195,11 +195,11 @@ def on_create_clicked(self, widget): if not parsed: self.status_label.set_text("Could not parse the reference string.") return - + # Find existing Source (by title) src = None src_handle = None - + for handle in self.dbstate.db.get_source_handles(): candidate = self.dbstate.db.get_source_from_handle(handle) for attr in candidate.get_attribute_list(): @@ -213,7 +213,7 @@ def on_create_clicked(self, widget): try: with DbTxn("Create Source and Citation", self.dbstate.db) as trans: - + # Source if src: self.status_label.set_text( @@ -223,14 +223,14 @@ def on_create_clicked(self, widget): src = Source() src.set_title(parsed["abr"]) src.set_publication_info(parsed["years"]) - + # FIXED NAD attribute nad_attr = Attribute() nad_attr.set_type("NAD") nad_attr.set_value(parsed["NAD"]) src.add_attribute(nad_attr) - - # FIXED AID attribute (if present) + + # FIXED AID attribute (if present) if parsed["AID"]: aid_attr = Attribute() aid_attr.set_type("AID") @@ -239,46 +239,46 @@ def on_create_clicked(self, widget): # First add the Source WITHOUT repo refs src_handle = self.dbstate.db.add_source(src, trans) - + # Now add RepoRef AFTER the source exists repo_ref = RepoRef() repo_handle = self.get_or_create_repository(parsed["provider"], trans) repo_ref.set_reference_handle(repo_handle) - + src.add_repo_reference(repo_ref) - + # Persist the updated Source with its RepoRef self.dbstate.db.commit_source(src, trans) - + # Citation if parsed["page"]: cit = Citation() cit.set_confidence_level(2) cit.set_page(parsed["page"]) - + years = parsed["years"] cit_date = Date() if years and "-" in years: start_year, end_year = [y.strip() for y in years.split("-")] cit_date.set( - modifier=Date.MOD_RANGE, + modifier=Date.MOD_RANGE, value=(0, 0, int(start_year), False, 0, 0, int(end_year), False)) cit.set_date_object(cit_date) elif years: cit_date.set_year(int(years.strip())) cit.set_date_object(cit_date) - - cit.set_reference_handle(src_handle) - + + cit.set_reference_handle(src_handle) + if parsed["full_AID"]: AID = Attribute() AID.set_type("AID") AID.set_value(parsed["full_AID"]) cit.add_attribute(AID) - + cit_handle = self.dbstate.db.add_citation(cit, trans) - + self.status_label.set_text( f"Created Source ({src.get_gramps_id()}) and Citation ({cit.get_gramps_id()})." ) @@ -287,7 +287,7 @@ def on_create_clicked(self, widget): f"Created Source ({src.get_gramps_id()}). No Citation created due to missing page info." ) - except Exception as e: + except Exception as e: LOG.error("ArchiveAssist failed: %s", str(e), exc_info=True) self.status_label.set_text( - "Failed to create Source/Citation. Check logs.") \ No newline at end of file + "Failed to create Source/Citation. Check logs.") \ No newline at end of file diff --git a/ArchiveAssist/po/da-local.po b/ArchiveAssist/po/da-local.po new file mode 100644 index 000000000..9d1d2c13a --- /dev/null +++ b/ArchiveAssist/po/da-local.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-29 10:44-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" +"Last-Translator: Kaj Arne Mikkelsen \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "" +"Parses strings from Riksarkivet and ArkivDigital to create sources and " +"citations." +msgstr "" +"Behandler strenge fra Riksarkivet og ArkivDigital for at danne kilder og " +"kildehenvisninger." + +msgid "Archive Assist" +msgstr "Arkivhjælp" diff --git a/ArchiveAssist/po/es-local.po b/ArchiveAssist/po/es-local.po new file mode 100644 index 000000000..ef29934cb --- /dev/null +++ b/ArchiveAssist/po/es-local.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: GRAMPS 3.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-29 10:44-0700\n" +"PO-Revision-Date: 2026-07-24 05:14+0000\n" +"Last-Translator: Juan Saavedra \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" + +msgid "" +"Parses strings from Riksarkivet and ArkivDigital to create sources and " +"citations." +msgstr "" +"Analiza cadenas de Riksarkivet y ArkivDigital para crear fuentes y citas." diff --git a/ArchiveAssist/po/fi-local.po b/ArchiveAssist/po/fi-local.po new file mode 100644 index 000000000..69ce7f6bf --- /dev/null +++ b/ArchiveAssist/po/fi-local.po @@ -0,0 +1,26 @@ +msgid "" +msgstr "" +"Project-Id-Version: fi\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-29 10:44-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" +"Generated-By: pygettext.py 1.4\n" + +msgid "" +"Parses strings from Riksarkivet and ArkivDigital to create sources and " +"citations." +msgstr "" +"Jäsentää Riksarkivet ja ArkivDigital -merkkijonoja lähteiden ja viittausten " +"luomiseksi." + +msgid "Archive Assist" +msgstr "Arkistoavustaja" diff --git a/AssociationsTool/associationstool.py b/AssociationsTool/associationstool.py index ef9a5bed0..c9b8c8906 100644 --- a/AssociationsTool/associationstool.py +++ b/AssociationsTool/associationstool.py @@ -184,7 +184,7 @@ def _build_with_progress(self) -> bool: # Process next batch batch_size = 50 - for _ in range(batch_size): + for _batch_step in range(batch_size): if self._build_index >= len(self._plist): # Done processing self.stats_list = self._build_data diff --git a/BirthdaysGramplet/po/ca-local.po b/BirthdaysGramplet/po/ca-local.po index 8499abb57..7f58ab37b 100644 --- a/BirthdaysGramplet/po/ca-local.po +++ b/BirthdaysGramplet/po/ca-local.po @@ -16,27 +16,3 @@ msgstr "" msgid "Birthdays" msgstr "Aniversaris" - -msgid "a gramplet that displays the birthdays of the living people" -msgstr "un grample que mostra els aniversaris de les persones vives" - -msgid "No Family Tree loaded." -msgstr "No s'ha carregat cap arbre genealògic." - -msgid "Sort birthdays by" -msgstr "Ordena els aniversaris per" - -msgid "Month and day" -msgstr "Mes i dia" - -msgid "Proximity to current date" -msgstr "Proximitat a la data actual" - -msgid "Ignore birthdays with tag" -msgstr "Ignora els aniversaris amb l'etiqueta" - -msgid "Only show birthdays with tag" -msgstr "Mostra només els aniversaris amb etiqueta" - -msgid "Processing..." -msgstr "S'està processant..." diff --git a/BirthdaysGramplet/po/da-local.po b/BirthdaysGramplet/po/da-local.po index e3b42bf4b..60135f45c 100644 --- a/BirthdaysGramplet/po/da-local.po +++ b/BirthdaysGramplet/po/da-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-02-25 16:12+0000\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Birthdays" msgstr "Fødseldage" @@ -20,23 +20,17 @@ msgstr "Fødseldage" msgid "a gramplet that displays the birthdays of the living people" msgstr "en gramplet der viser fødselsdage for levende persone" -msgid "No Family Tree loaded." -msgstr "Intet stamtræ er indlæst." - msgid "Sort birthdays by" -msgstr "Sorter fødselsdage efter" +msgstr "Sortér fødselsdage efter" msgid "Month and day" msgstr "Måned og dag" msgid "Proximity to current date" -msgstr "Nærhed til nuværende dato" +msgstr "Afstand til nuværende dato" msgid "Ignore birthdays with tag" msgstr "Undlad fødseldage med ettiket" msgid "Only show birthdays with tag" msgstr "Vis kun fødseldage med ettiket" - -msgid "Processing..." -msgstr "Forarbejdning..." diff --git a/BirthdaysGramplet/po/de-local.po b/BirthdaysGramplet/po/de-local.po index 081991e53..1f2ef9e56 100644 --- a/BirthdaysGramplet/po/de-local.po +++ b/BirthdaysGramplet/po/de-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-05-19 21:02+0000\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Mirko Leonhäuser \n" "Language-Team: German \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.12-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Birthdays" msgstr "Geburtstage" @@ -20,9 +20,6 @@ msgstr "Geburtstage" msgid "a gramplet that displays the birthdays of the living people" msgstr "ein Gramplet, das die Geburtstage der lebenden Personen anzeigt" -msgid "No Family Tree loaded." -msgstr "Kein Stammbaum geladen." - msgid "Sort birthdays by" msgstr "Geburtstage sortieren nach" @@ -37,6 +34,3 @@ msgstr "Geburtstage mit Etikett ignorieren" msgid "Only show birthdays with tag" msgstr "Nur Geburtstage mit Etikett anzeigen" - -msgid "Processing..." -msgstr "Verarbeitung..." diff --git a/BirthdaysGramplet/po/es-local.po b/BirthdaysGramplet/po/es-local.po index d22857973..035cd4af0 100644 --- a/BirthdaysGramplet/po/es-local.po +++ b/BirthdaysGramplet/po/es-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: GRAMPS 3.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2026-05-04 21:37+0000\n" -"Last-Translator: Francisco Serrador \n" +"PO-Revision-Date: 2026-07-24 05:14+0000\n" +"Last-Translator: Juan Saavedra \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Birthdays" msgstr "Cumpleaños" @@ -20,23 +20,8 @@ msgstr "Cumpleaños" msgid "a gramplet that displays the birthdays of the living people" msgstr "un gramplet que exhibe los cumpleaños de la gente viva" -msgid "No Family Tree loaded." -msgstr "No se ha cargado ningún árbol genealógico." - -msgid "Sort birthdays by" -msgstr "Ordenar cumpleaños por" - -msgid "Month and day" -msgstr "mes y dia" - -msgid "Proximity to current date" -msgstr "Proximidad a la fecha actual" - msgid "Ignore birthdays with tag" msgstr "Ignorar cumpleaños con etiqueta" msgid "Only show birthdays with tag" msgstr "Solo mostrar cumpleaños con etiqueta" - -msgid "Processing..." -msgstr "Tratamiento..." diff --git a/BirthdaysGramplet/po/fi-local.po b/BirthdaysGramplet/po/fi-local.po index 9768e7e59..c3a853f4a 100644 --- a/BirthdaysGramplet/po/fi-local.po +++ b/BirthdaysGramplet/po/fi-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-02-20 13:28+0000\n" -"Last-Translator: Matti Niemelä \n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.1-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" msgid "Birthdays" @@ -21,23 +21,8 @@ msgstr "Syntymäpäivät" msgid "a gramplet that displays the birthdays of the living people" msgstr "Gramplet, joka näyttää elävien ihmisten syntymä päivät ja iät" -msgid "No Family Tree loaded." -msgstr "Sukupuuta ei ladattu." - -msgid "Sort birthdays by" -msgstr "Lajittele syntymäpäivät" - -msgid "Month and day" -msgstr "Kuukausi ja päivä" - -msgid "Proximity to current date" -msgstr "Läheisyys nykyiseen päivämäärään" - msgid "Ignore birthdays with tag" msgstr "Jätä pois syntymäpäivät, joissa on tagi" msgid "Only show birthdays with tag" msgstr "Näytä vain syntymäpäivät, joissa on tagi" - -msgid "Processing..." -msgstr "Käsitellään..." diff --git a/BirthdaysGramplet/po/fr-local.po b/BirthdaysGramplet/po/fr-local.po index db330e1bc..d64f568be 100644 --- a/BirthdaysGramplet/po/fr-local.po +++ b/BirthdaysGramplet/po/fr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2026-05-14 19:17+0000\n" +"PO-Revision-Date: 2026-07-01 15:01+0000\n" "Last-Translator: \"David D.\" \n" "Language-Team: French \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -"X-Generator: Weblate 2026.5.dev0\n" +"X-Generator: Weblate 2026.7.dev0\n" msgid "Birthdays" msgstr "Jours de naissance" @@ -20,23 +20,8 @@ msgstr "Jours de naissance" msgid "a gramplet that displays the birthdays of the living people" msgstr "Ce Gramplet affiche les anniversaires des personnes en vie" -msgid "No Family Tree loaded." -msgstr "Aucun arbre généalogique chargé." - -msgid "Sort birthdays by" -msgstr "Trier les anniversaires par" - -msgid "Month and day" -msgstr "Mois et jour" - -msgid "Proximity to current date" -msgstr "Proximité à la date actuelle" - msgid "Ignore birthdays with tag" msgstr "Ignorer les anniversaires avec cette étiquette" msgid "Only show birthdays with tag" msgstr "Montrer seulement les anniversaires avec cette étiquette" - -msgid "Processing..." -msgstr "Traitement..." diff --git a/BirthdaysGramplet/po/he-local.po b/BirthdaysGramplet/po/he-local.po index d77847577..2db63416a 100644 --- a/BirthdaysGramplet/po/he-local.po +++ b/BirthdaysGramplet/po/he-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Gramps 5.2.0 – mediamerge\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-08-11 18:01+0000\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Avi Markovitz \n" "Language-Team: Hebrew \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 5.13-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Birthdays" msgstr "ימי הולדת" @@ -21,23 +21,17 @@ msgstr "ימי הולדת" msgid "a gramplet that displays the birthdays of the living people" msgstr "גרמפלט שמציג את ימי ההולדת של האנשים החיים" -msgid "No Family Tree loaded." -msgstr "לא נטען אילן יוחסין." - msgid "Sort birthdays by" -msgstr "מיין ימי הולדת לפי" +msgstr "מיון תאריכי־לידה לפי" msgid "Month and day" msgstr "חודש ויום" msgid "Proximity to current date" -msgstr "קרבה לתאריך הנוכחי" +msgstr "סמיכות לתריך נוכחי" msgid "Ignore birthdays with tag" msgstr "להתעלם מימי הולדת מתוייגים בתג" msgid "Only show birthdays with tag" msgstr "להציג רק ימי הולדת מתוייגים בתג" - -msgid "Processing..." -msgstr "מעבד..." diff --git a/BirthdaysGramplet/po/hr-local.po b/BirthdaysGramplet/po/hr-local.po index b653a4223..311728149 100644 --- a/BirthdaysGramplet/po/hr-local.po +++ b/BirthdaysGramplet/po/hr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Gramps 5.x\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-03-02 14:58+0000\n" +"PO-Revision-Date: 2026-05-17 15:49+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.10.3-dev\n" +"X-Generator: Weblate 2026.6.dev0\n" msgid "Birthdays" msgstr "Rođendani" @@ -21,23 +21,8 @@ msgstr "Rođendani" msgid "a gramplet that displays the birthdays of the living people" msgstr "gramplet prikazuje rođendane živih osoba" -msgid "No Family Tree loaded." -msgstr "Nije učitano obiteljsko stablo." - -msgid "Sort birthdays by" -msgstr "Poredaj rođendane po" - -msgid "Month and day" -msgstr "Mjesec i dan" - -msgid "Proximity to current date" -msgstr "Blizina trenutnog datuma" - msgid "Ignore birthdays with tag" msgstr "Zanemari rođendane s oznakom" msgid "Only show birthdays with tag" msgstr "Prikaži samo rođendane s oznakom" - -msgid "Processing..." -msgstr "Obrada..." diff --git a/BirthdaysGramplet/po/hu-local.po b/BirthdaysGramplet/po/hu-local.po index 12f207332..03986f578 100644 --- a/BirthdaysGramplet/po/hu-local.po +++ b/BirthdaysGramplet/po/hu-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: hu\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2026-02-21 14:09+0000\n" -"Last-Translator: Daniel Szollosi-Nagy \n" +"PO-Revision-Date: 2026-06-05 13:54+0000\n" +"Last-Translator: Milan \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -12,31 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.16.1-dev\n" +"X-Generator: Weblate 2026.6\n" msgid "Birthdays" msgstr "Születésnapok" - -msgid "a gramplet that displays the birthdays of the living people" -msgstr "egy gramplet, amely megjeleníti az élő emberek születésnapját" - -msgid "No Family Tree loaded." -msgstr "Nincs betöltve családfa." - -msgid "Sort birthdays by" -msgstr "Születésnapok rendezése szerint" - -msgid "Month and day" -msgstr "Hónap és nap" - -msgid "Proximity to current date" -msgstr "Az aktuális dátum közelsége" - -msgid "Ignore birthdays with tag" -msgstr "A címkével ellátott születésnapok figyelmen kívül hagyása" - -msgid "Only show birthdays with tag" -msgstr "Csak a címkével ellátott születésnapokat jelenítse meg" - -msgid "Processing..." -msgstr "Feldolgozás..." diff --git a/BirthdaysGramplet/po/it-local.po b/BirthdaysGramplet/po/it-local.po index ba1f9ee4e..05635b0f4 100644 --- a/BirthdaysGramplet/po/it-local.po +++ b/BirthdaysGramplet/po/it-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: gramps 3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-09-06 11:01+0000\n" -"Last-Translator: Luigi Toscano \n" +"PO-Revision-Date: 2026-07-31 16:24+0000\n" +"Last-Translator: medardo \n" "Language-Team: Italian \n" "Language: it\n" @@ -12,31 +12,19 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.14-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Birthdays" msgstr "Compleanni" msgid "a gramplet that displays the birthdays of the living people" -msgstr "un gramplet che mostra i compleanni delle persone in vita" - -msgid "No Family Tree loaded." -msgstr "Nessun albero genealogico caricato." - -msgid "Sort birthdays by" -msgstr "Ordina i compleanni per" +msgstr "Un gramplet che mostra i compleanni delle persone in vita" msgid "Month and day" msgstr "Mese e giorno" -msgid "Proximity to current date" -msgstr "Prossimità alla data attuale" - msgid "Ignore birthdays with tag" msgstr "Ignora compleanni con etichetta" msgid "Only show birthdays with tag" msgstr "Mostra solo compleanni con etichetta" - -msgid "Processing..." -msgstr "Elaborazione..." diff --git a/BirthdaysGramplet/po/lt-local.po b/BirthdaysGramplet/po/lt-local.po index 2ee8a3e6c..21efd388e 100644 --- a/BirthdaysGramplet/po/lt-local.po +++ b/BirthdaysGramplet/po/lt-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: lt\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-08-27 08:02+0000\n" -"Last-Translator: Tadas Masiulionis \n" +"PO-Revision-Date: 2026-01-04 20:01+0000\n" +"Last-Translator: openSUSE Lietuviškai \n" "Language-Team: Lithuanian \n" "Language: lt\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.13\n" +"X-Generator: Weblate 5.15.1\n" "Generated-By: pygettext.py 1.4\n" "X-Poedit-Language: Lithuanian\n" "X-Poedit-Country: LITHUANIA\n" @@ -24,23 +24,8 @@ msgstr "Gimtadieniai" msgid "a gramplet that displays the birthdays of the living people" msgstr "grampletas, rodanti gyvų žmonių gimtadienius" -msgid "No Family Tree loaded." -msgstr "Šeimos medis neįkeltas." - -msgid "Sort birthdays by" -msgstr "Rūšiuoti gimtadienius pagal" - -msgid "Month and day" -msgstr "Mėnuo ir diena" - -msgid "Proximity to current date" -msgstr "Artumas iki dabartinės datos" - msgid "Ignore birthdays with tag" msgstr "Nepaisyti gimtadienių su gairėmis" msgid "Only show birthdays with tag" msgstr "Rodyti tik gimimo datas su gaire" - -msgid "Processing..." -msgstr "Apdorojama..." diff --git a/BirthdaysGramplet/po/nb-local.po b/BirthdaysGramplet/po/nb-local.po index 419f54f15..92513d27d 100644 --- a/BirthdaysGramplet/po/nb-local.po +++ b/BirthdaysGramplet/po/nb-local.po @@ -21,23 +21,8 @@ msgstr "Bursdager" msgid "a gramplet that displays the birthdays of the living people" msgstr "en gramplet som viser bursdager for levende personer" -msgid "No Family Tree loaded." -msgstr "Ingen slektstre lastet." - -msgid "Sort birthdays by" -msgstr "Sorter bursdager etter" - -msgid "Month and day" -msgstr "Måned og dag" - -msgid "Proximity to current date" -msgstr "Nærhet til gjeldende dato" - msgid "Ignore birthdays with tag" msgstr "Ignorer bursdager med merke" msgid "Only show birthdays with tag" msgstr "Vis kun bursdager med merke" - -msgid "Processing..." -msgstr "Behandling..." diff --git a/BirthdaysGramplet/po/nl-local.po b/BirthdaysGramplet/po/nl-local.po index 074b104f7..66249d10c 100644 --- a/BirthdaysGramplet/po/nl-local.po +++ b/BirthdaysGramplet/po/nl-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: MediaMerge 5.x\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-04-14 22:32+0000\n" +"PO-Revision-Date: 2026-08-03 04:01+0000\n" "Last-Translator: Stephan Paternotte \n" "Language-Team: Dutch \n" @@ -12,32 +12,26 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.11-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Birthdays" msgstr "Verjaardagen" msgid "a gramplet that displays the birthdays of the living people" -msgstr "een gramplet die de verjaardagen van de levende mensen weergeeft" +msgstr "" "een gramplet dat de verjaardagen van de nog in leven zijnde personen toont" -msgid "No Family Tree loaded." -msgstr "Geen stamboom geladen." - msgid "Sort birthdays by" -msgstr "Sorteer verjaardagen op" +msgstr "Verjaardagen sorteren op" msgid "Month and day" msgstr "Maand en dag" msgid "Proximity to current date" -msgstr "Nabijheid tot de huidige datum" +msgstr "Nabijheid tot huidige datum" msgid "Ignore birthdays with tag" msgstr "Verjaardagen met label negeren" msgid "Only show birthdays with tag" msgstr "Alleen verjaardagen met label weergeven" - -msgid "Processing..." -msgstr "Verwerken..." diff --git a/BirthdaysGramplet/po/pl-local.po b/BirthdaysGramplet/po/pl-local.po index 87d48690e..61dba5673 100644 --- a/BirthdaysGramplet/po/pl-local.po +++ b/BirthdaysGramplet/po/pl-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: GRAMPS 3.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-08-23 15:02+0000\n" -"Last-Translator: Krystian Safjan \n" +"PO-Revision-Date: 2025-12-14 21:00+0000\n" +"Last-Translator: WaldiS \n" "Language-Team: Polish \n" "Language: pl\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.13\n" +"X-Generator: Weblate 5.15-dev\n" "X-Poedit-Language: Polish\n" "X-Poedit-Country: POLAND\n" "X-Poedit-Basepath: .\n" @@ -25,23 +25,8 @@ msgstr "Urodziny" msgid "a gramplet that displays the birthdays of the living people" msgstr "gramplet wyświetlający urodziny osób żyjących" -msgid "No Family Tree loaded." -msgstr "Nie załadowano żadnego drzewa genealogicznego." - -msgid "Sort birthdays by" -msgstr "Sortuj urodziny według" - -msgid "Month and day" -msgstr "Miesiąc i dzień" - -msgid "Proximity to current date" -msgstr "Bliskość aktualnej daty" - msgid "Ignore birthdays with tag" msgstr "Ignoruj urodziny z etykietą" msgid "Only show birthdays with tag" msgstr "Pokazuj tylko urodziny z etykietą" - -msgid "Processing..." -msgstr "Przetwarzanie..." diff --git a/BirthdaysGramplet/po/pt_BR-local.po b/BirthdaysGramplet/po/pt_BR-local.po index b77bb4197..419d55c89 100644 --- a/BirthdaysGramplet/po/pt_BR-local.po +++ b/BirthdaysGramplet/po/pt_BR-local.po @@ -3,39 +3,16 @@ msgstr "" "Project-Id-Version: trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2012-08-26 20:57-0300\n" -"Last-Translator: André Marcelo Alvarenga \n" -"Language-Team: Brazilian Portuguese>\n" -"Language: \n" +"PO-Revision-Date: 2026-06-28 22:01+0000\n" +"Last-Translator: Andre Magri \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Lokalize 1.0\n" - -msgid "Birthdays" -msgstr "Aniversários" +"X-Generator: Weblate 2026.7.dev0\n" msgid "a gramplet that displays the birthdays of the living people" msgstr "Gramplet que mostra os aniversários das pessoas vivas" - -msgid "No Family Tree loaded." -msgstr "Nenhuma árvore genealógica carregada." - -msgid "Sort birthdays by" -msgstr "Classificar aniversários por" - -msgid "Month and day" -msgstr "Mês e dia" - -msgid "Proximity to current date" -msgstr "Proximidade da data atual" - -msgid "Ignore birthdays with tag" -msgstr "Ignorar aniversários com tag" - -msgid "Only show birthdays with tag" -msgstr "Mostrar apenas aniversários com tag" - -msgid "Processing..." -msgstr "Processamento..." diff --git a/BirthdaysGramplet/po/pt_PT-local.po b/BirthdaysGramplet/po/pt_PT-local.po index 5b109fdbe..907d0aa36 100644 --- a/BirthdaysGramplet/po/pt_PT-local.po +++ b/BirthdaysGramplet/po/pt_PT-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: gramps51\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-03-08 07:05+0000\n" +"PO-Revision-Date: 2026-08-03 04:01+0000\n" "Last-Translator: Pedro Albuquerque \n" "Language-Team: Portuguese (Portugal) \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.3-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Birthdays" msgstr "Aniversários" @@ -20,23 +20,17 @@ msgstr "Aniversários" msgid "a gramplet that displays the birthdays of the living people" msgstr "um gramplet que mostra os aniversários de indivíduos vivos" -msgid "No Family Tree loaded." -msgstr "Nenhuma árvore genealógica carregada." - msgid "Sort birthdays by" -msgstr "Classificar aniversários por" +msgstr "Ordenar aniversários por" msgid "Month and day" msgstr "Mês e dia" msgid "Proximity to current date" -msgstr "Proximidade da data atual" +msgstr "Proximidade à data actual" msgid "Ignore birthdays with tag" msgstr "Ignorar aniversários com etiqueta" msgid "Only show birthdays with tag" msgstr "Mostrar só aniversários com etiqueta" - -msgid "Processing..." -msgstr "Processamento..." diff --git a/BirthdaysGramplet/po/ru-local.po b/BirthdaysGramplet/po/ru-local.po index 2b45b78b8..a6529c687 100644 --- a/BirthdaysGramplet/po/ru-local.po +++ b/BirthdaysGramplet/po/ru-local.po @@ -3,42 +3,19 @@ msgstr "" "Project-Id-Version: gramps50\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2018-12-04 16:36+0300\n" -"Last-Translator: Ivan Komaritsyn \n" -"Language-Team: Russian\n" +"PO-Revision-Date: 2026-06-09 08:01+0000\n" +"Last-Translator: Vadim Barsukov \n" +"Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Gtranslator 2.91.7\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Weblate 2026.6\n" "X-Poedit-Language: Russian\n" "X-Poedit-Country: RUSSIAN FEDERATION\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" - -msgid "Birthdays" -msgstr "Дни рождения" msgid "a gramplet that displays the birthdays of the living people" msgstr "Грамплет отображающий дни рождения живых людей" - -msgid "No Family Tree loaded." -msgstr "Семейное древо не загружено." - -msgid "Sort birthdays by" -msgstr "Сортировать дни рождения по" - -msgid "Month and day" -msgstr "Месяц и день" - -msgid "Proximity to current date" -msgstr "Близость к текущей дате" - -msgid "Ignore birthdays with tag" -msgstr "Игнорировать дни рождения с тегом" - -msgid "Only show birthdays with tag" -msgstr "Показывать только дни рождения с тегом" - -msgid "Processing..." -msgstr "Обработка..." diff --git a/BirthdaysGramplet/po/sk-local.po b/BirthdaysGramplet/po/sk-local.po index 9237755d0..eb8f96d0e 100644 --- a/BirthdaysGramplet/po/sk-local.po +++ b/BirthdaysGramplet/po/sk-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: GRAMPS 3.1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2026-05-11 10:34+0000\n" +"PO-Revision-Date: 2026-08-05 18:02+0000\n" "Last-Translator: Milan \n" "Language-Team: Slovak \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" -"X-Generator: Weblate 2026.5-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Birthdays" msgstr "Narodeniny" @@ -20,9 +20,6 @@ msgstr "Narodeniny" msgid "a gramplet that displays the birthdays of the living people" msgstr "Gramplet, ktorý zobrazuje narodeniny žijúcich ľudí" -msgid "No Family Tree loaded." -msgstr "Nebol načítaný žiadny rodokmeň." - msgid "Sort birthdays by" msgstr "Zoradiť narodeniny podľa" @@ -37,6 +34,3 @@ msgstr "Ignorovať dni narodenia so štítkom" msgid "Only show birthdays with tag" msgstr "Zobraziť iba dni narodenia so štítkom" - -msgid "Processing..." -msgstr "Spracúva sa..." diff --git a/BirthdaysGramplet/po/sv-local.po b/BirthdaysGramplet/po/sv-local.po index 5eaadf21e..c484c68a3 100644 --- a/BirthdaysGramplet/po/sv-local.po +++ b/BirthdaysGramplet/po/sv-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-05-26 07:15+0000\n" +"PO-Revision-Date: 2026-08-03 04:02+0000\n" "Last-Translator: Pär Ekholm \n" "Language-Team: Swedish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.12-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Birthdays" msgstr "Födelsedagar" @@ -20,9 +20,6 @@ msgstr "Födelsedagar" msgid "a gramplet that displays the birthdays of the living people" msgstr "en Gramplet, som visar födelsedagarna för levande personer" -msgid "No Family Tree loaded." -msgstr "Inget släktträd laddat." - msgid "Sort birthdays by" msgstr "Sortera födelsedagar efter" @@ -37,6 +34,3 @@ msgstr "Ignorera födelsedagar med tagg" msgid "Only show birthdays with tag" msgstr "Visa endast födelsedagar med tagg" - -msgid "Processing..." -msgstr "Bearbetar..." diff --git a/BirthdaysGramplet/po/tr-local.po b/BirthdaysGramplet/po/tr-local.po index d0fc366b4..6f03772b2 100644 --- a/BirthdaysGramplet/po/tr-local.po +++ b/BirthdaysGramplet/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2026-05-30 20:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.6.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -23,23 +23,17 @@ msgstr "Doğum günleri" msgid "a gramplet that displays the birthdays of the living people" msgstr "Yaşayan kişilerin doğum günlerini gösteren bir gramplet" -msgid "No Family Tree loaded." -msgstr "Soy Ağacı yüklenmedi." - msgid "Sort birthdays by" -msgstr "Doğum günlerini şuna göre sırala:" +msgstr "Doğum günlerine göre sırala" msgid "Month and day" msgstr "Ay ve gün" msgid "Proximity to current date" -msgstr "Güncel tarihe yakınlık" +msgstr "Geçerli tarihe yakınlık" msgid "Ignore birthdays with tag" msgstr "Etiketli doğum günlerini yok say" msgid "Only show birthdays with tag" msgstr "Sadece etiketli doğum günlerini göster" - -msgid "Processing..." -msgstr "İşleme..." diff --git a/BirthdaysGramplet/po/uk-local.po b/BirthdaysGramplet/po/uk-local.po index e81386b17..cf5900d23 100644 --- a/BirthdaysGramplet/po/uk-local.po +++ b/BirthdaysGramplet/po/uk-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-04 00:00-0000\n" -"PO-Revision-Date: 2025-03-06 13:57+0000\n" -"Last-Translator: Yurii Liubymyi \n" +"PO-Revision-Date: 2025-11-17 06:51+0000\n" +"Last-Translator: Fedir Zinchuk \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.10.3-dev\n" +"X-Generator: Weblate 5.15-dev\n" msgid "Birthdays" msgstr "Дні народження" @@ -21,23 +21,8 @@ msgstr "Дні народження" msgid "a gramplet that displays the birthdays of the living people" msgstr "грамплет, що відображає дні народження живих людей" -msgid "No Family Tree loaded." -msgstr "Сімейне дерево не завантажено." - -msgid "Sort birthdays by" -msgstr "Сортувати дні народження за" - -msgid "Month and day" -msgstr "Місяць і день" - -msgid "Proximity to current date" -msgstr "Близькість до поточної дати" - msgid "Ignore birthdays with tag" msgstr "Ігнорувати дні народження з тегом" msgid "Only show birthdays with tag" msgstr "Показувати лише дні народження з тегом" - -msgid "Processing..." -msgstr "Обробка..." diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dda23171b..702156efa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,13 +23,21 @@ If you're looking for *existing* addons to install, see If you're looking to contribute to Gramps directly, see [Portal:Developers](https://gramps-project.org/wiki/index.php/Getting_started_with_Gramps_development). +This document is the contributor **workflow** guide: repository setup, the +development loop, the checklist, and the pull-request process. The full +technical reference is the in-repo +[Addon Development manual](docs/addon-development/README.md) — seventeen +pages from a first Gramplet through testing, debugging, packaging, and +cross-version compatibility. Where a section below has a deeper counterpart +in the manual, it links there instead of repeating it. + ## Table of Contents * [What Can Addons Extend?](#what-can-addons-extend) * [Overview of Writing an Addon](#overview-of-writing-an-addon) * [Develop Your Addon](#develop-your-addon) - * [Addons Source Code Repository](#addon-source-code-repository) + * [Addons Source Code Repository](#addons-source-code-repository) * [Addons Download Repository](#addons-download-repository) - * [Set Up a Github Account](#setup-a-github-account) + * [Set Up a Github Account](#set-up-a-github-account) * [Create Project Forks in Github](#create-project-forks-in-github) * [Set Up Addon Development Environment](#set-up-addon-development-environment) * [Gramps Repository](#gramps-repository) @@ -50,7 +58,7 @@ If you're looking to contribute to Gramps directly, see * [Review the Addon Checklist](#review-the-addon-checklist) * [Create a Pull Request](#create-a-pull-request) * [Commit Your Changes](#commit-your-changes) - * [Verify Your Addon Is Current](#verify your addon is current) + * [Verify Your Addon Is Current](#verify-your-addon-is-current) * [Push To Your Fork](#push-to-your-fork) * [Create the PR](#create-the-pr) * [Work Towards a Merge](#work-towards-a-merge) @@ -60,47 +68,21 @@ If you're looking to contribute to Gramps directly, see * [List Your Addon](#list-your-addon) * [Document Your Addon](#document-your-addon) * [Support Your Addon Through Bug Tracker](#support-your-addon-through-bug-tracker) -* [Maintain Your Addon Code as Gramps Evolves](#maintain-your-addon-code-as-gramps-evolves) +* [Maintain Your Addon Code as Gramps Evolves](#maintain-your-addon-as-gramps-evolves) * [Resources](#resources) * [Addon Development Tutorials and Samples](#addon-development-tutorials-and-samples) * [Addons External to Github](#addons-external-to-github) ## What Can Addons Extend? - -Addons for Gramps can extend the program in many different ways. You can -add any of the following [types](https://github.com/gramps-project/gramps/blob/master/gramps/gen/plug/_pluginreg.py) of addons: - -* **Importer** (IMPORT) - adds additional file format import options to Gramps -* **Exporter** (EXPORT) - adds additional file format export options to Gramps -* **[Gramplet](https://gramps-project.org/wiki/index.php/Gramps_Glossary#gramplet)** (GRAMPLET) - adds a new -interactive interface section to a Gramps view mode, which can be -activated by right-clicking on the dashboard View or from the menu -of the Sidebar/Bottombar in other view categories. -* **Gramps** [**View mode**](https://gramps-project.org/wiki/index.php/Gramps_Glossary#viewmode) (VIEW) - adds a -new view mode to the list of views available within a -[View Category](https://gramps-project.org/wiki/index.php/Gramps_Glossary#view) -* **[Map Service](https://gramps-project.org/wiki/index.php/[Map_Services)** -(MAPSERVICE) - adds new mapping options to Gramps -* **Plugin lib** (GENERAL) - libraries that provide extra functionality when -present; can add, replace and/or modify builtin Gramps options. -* **[Quickreport/Quickview](https://gramps-project.org/wiki/indew/Gramps_6.0_Wiki_Manual_-_Reports_-_part_8#Quick_Views)** (QUICKREPORT) - a view -that you can run by right-clicking on an object, or if a person quickview, -then via the Quick View Gramplet -* **[Report](https://gramps-project.org/wiki/index.php/Gramps_6.0_Wiki_Manual_-_Reports_-_part_1)** (REPORT) - adds a new output report; this includes -**Website** that outputs a static genealogy website based on your Gramps -Family Tree data. -* **[Rule](https://gramps-project.org/wiki/index.php/Gramps_6.0_Wiki_Manual_-_Filters#Add_Rule_dialog)** (RULE) - adds new -[filter](https://gramps-project.org/wiki/index.php/Gramps_Glossary#filter) -rules. New starting with Gramps 5.1. -* **[Tool](https://gramps-project.org/wiki/index.php/Gramps_6.0_Wiki_Manual_-_Tools)** (TOOL) - adds a utility that helps process data from your family tree. -* **Doc creator** (DOCGEN) -* **Relationships** (RECALC) -* **Sidebar** (SIDEBAR) -* **[Database](https://gramps-project.org/wiki/index.php/Database_Backends)** -(DATABASE) - add support for another database backend. New starting with -Gramps 5.0. -* **Thumbnailer** (THUMBNAILER) New starting with Gramps 5.2 -* **Citation formatter** (CITE) New starting with Gramps 5.2 +Addons can extend Gramps at almost every plugin point: Importers and +Exporters, Gramplets, View modes, Map Services, plugin libraries (GENERAL), +Quickviews, Reports, filter Rules, Tools, document generators (DOCGEN), +relationship calculators, Sidebars, Database backends, Thumbnailers, and +Citation formatters. + +The full catalogue — with the registration constant, UI location, base +class, and per-kind notes for each — is in the manual: +[Addon Kinds](docs/addon-development/03-addon-kinds.md). ## Overview of Writing an Addon Writing an addon is fairly straightforward if you have a bit of Python @@ -110,11 +92,11 @@ general steps to writing and sharing your own addons are: * [Develop your addon](#develop-your-addon) * [Create a Gramps plugin registration file](#create-a-gramps-plugin-registration-file) - e.g., a file named ```my-addon.gpr.py``` * [Review the Addon Checklist](#review-the-addon-checklist) -* [Create a Pull Request for your addon](#create-pr) -* [Announce it on the Gramps forum](#announce-the-addon) - Let users +* [Create a Pull Request for your addon](#create-a-pull-request) +* [Announce it on the Gramps forum](#announce-your-addon) - Let users know it exists and how to use it. -* [Support it through the issue tracker](#support-it-through-issue-tracker) -* [Maintain the code](#maintain-the-code-as-gramps-continues-to-evolve) as +* [Support it through the issue tracker](#support-your-addon-through-bug-tracker) +* [Maintain the code](#maintain-your-addon-as-gramps-evolves) as the Gramps code continues to evolve We'll now expand on each of these steps. @@ -463,24 +445,24 @@ see [Writing a Plugin](https://gramps-project.org/wiki/index.php/Writing_a_Plugin) specifically. +The manual walks these end-to-end: +[Tutorials](docs/addon-development/02-tutorials.md) builds one addon per +kind, and [Fundamentals](docs/addon-development/04-fundamentals.md) covers +the cross-cutting basics every kind shares. ### Test Your Addon As You Develop -To test your addon as you develop, we recommend you copy your -```NewProjectName``` plugin into your Gramps user plugin directory -from your addon development directory, prior to testing. Or, just -edit in the Gramps user plugin directory until it is ready to publish, -then copy back to your addon development directory. Your installed Gramps -desktop application will search this folder (and subdirectories) for -any ```.gpr.py``` files, and add them to the plugin list. - -You can of course still use the ```git``` branch for your addon to store -intermediate steps and other work in progress. - -> #### Warning -> [Bug #10436](https://gramps-project.org/bugs/view.php?id=10436) -> Symbolic links to folders in the gramps plugin directory are not scanned, so -> you cannot just create a symbolic link pointing to your addon source tree; -> you will have to copy it. +To test your addon as you develop, copy your ```NewProjectName``` folder +into the Gramps user plugin directory and restart Gramps — plugin discovery +happens at startup. On Gramps 6.0, discovery does **not** follow symbolic +links ([Bug #10436](https://gramps-project.org/bugs/view.php?id=10436)), so +a physical copy is required; Gramps 6.1 and later follow symlinks, so you +can link your working tree in once and edit in place. + +The manual covers the full development loop — where addons live, the +restart cycle, and a first working Gramplet — in +[the overview](docs/addon-development/01-overview.md#where-addons-live), +and how to test logic without launching the GUI in +[Testing](docs/addon-development/07-testing.md). If you have code that you want to share between addons, you don't need to do anything special. Gramps adds each directory in which a ```.gpr.py``` @@ -490,123 +472,42 @@ should always make sure you name your addons with a name appropriate for Python imports. ### Addon Configuration -Some addons may want to have persistent data (data settings that remain -between sessions). You can handle this yourself, or you can use Gramps' -builtin configure system. - -At the top of the source file for your addon, you would do this: -``` - from config import config as configman - config = configman.register_manager("grampletname") - # register the values to save: - config.register("section.option-name1", value1) - config.register("section.option-name2", value2) - ... - # load an existing file, if one: - config.load() - # save it, it case it didn't exist: - config.save() -``` - -This will create the file ```grampletname.ini``` and put it in the same -directory as the addon. If the config file already exists, it remains intact. -The natural location for ```.ini``` files is in the directory in which -the addon is installed; using the main ```gramps.ini``` file for addon -preferences could potentially lead to a conflict between addons. Other -locations and file formats are possible. See -[The Gramps architect recommends leaving this decision to the addon developer](https://gramps.discourse.group/t/add-option-for-boolean-options-in-gramplet/6371/19). - -In the addon, you can then: -``` - x = config.get("section.option-name1") - config.set("section.option-name1", 3) -``` - -and when this code is exiting, you might want to save the config. In a -Gramplet that would be: -``` - def on_save(self): - config.save() -``` - -If your code is a system-level file, then you might want to save the -config in the Gramps system folder: -``` - config = configman.register_manager("system", use_config_path=True) -``` - -This is rare; most ```.ini``` files go into the plugins directory. - -In other code that might use this config file, you would do this: -``` - from config import config as configman - config = configman.get_manager("grampletname") - x = config.get("section.option-name1") -``` +Some addons want persistent settings that survive between sessions. Use +Gramps' builtin configuration manager (```configman```) rather than rolling +your own file handling — the addon's ```.ini``` file lands in the addon's +own directory, so it cannot conflict with ```gramps.ini``` or with other +addons ([the Gramps architect recommends leaving the location decision to +the addon developer](https://gramps.discourse.group/t/add-option-for-boolean-options-in-gramplet/6371/19)). + +The full pattern — registering keys, load/save, the rare +```use_config_path``` system-folder case, and reading another addon's +settings with ```get_manager``` — is in the manual: +[Fundamentals → Configuration and persistent settings](docs/addon-development/04-fundamentals.md#configuration-and-persistent-settings). ### Localization - -> #### Note -> These instructions will only work for Python strings. If you have a -> glade file, it will not get translated. - -For general help with translations for Gramps, see -[Coding for translation](https://gramps-project.org/wiki/index.php/Coding_for_translation). However, that will only use translations that come with Gramps, -or allow you to contribute translations to the Gramps core. To have your own -managed translations that will be packaged with your addon, you will need to -add a way to retrieve the translation. Add the following to the top of your -```NewProjectName.py``` file: +Wrap every user-visible string in ```_()```, and bind the addon's own +translation catalog at the top of each implementation module: ``` from gramps.gen.const import GRAMPS_LOCALE as glocale - = glocale.get_addon_translator(__file__).gettext -``` -Then you can use the standard "```_()```" function to translate phrases in -your addon. - -You can use one of a few different types of translation functions: + _ = glocale.get_addon_translator(__file__).gettext ``` - gettext - lgettext - ngettext - lngettext - sgettext -``` - -These are obsolete starting in Gramps 4.x; ```gettext```, ```ngettext```, and -```sgettext``` always return translated strings in Unicode for consistent -portability between Python2 and Python3. - -See the [Python documentation](http://docs.python.org/3/library/gettext.html#the-gnutranslations-class) for using ```gettext``` and ```ngettext```. The -"l" versions return the string encoded according to the -[currently set locale](http://docs.python.org/3/library/locale.html#locale.setlocale); -the "u" versions return Unicode strings in Python2 and are no longer available -in Python3. +Glade files are **not** extracted automatically — mark their strings +translatable and override the labels at runtime in Python. -The method ```sgettext``` should always be used; it is a Gramps extension -that filters out clarifying comments for translators, such as in -```_("Remaining names | rest")``` where "rest" is the English string that -we want to present and "Remaining names" is a hint for translators. +The full workflow — string marking rules, plural forms, context prefixes +(```_("Remaining names|rest")```), ```.pot```/```.po``` generation with +```make.py```, and Weblate — is in the manual: +[Internationalization](docs/addon-development/11-internationalization.md). ### Files Included in Addon Distribution -The process that creates the compressed tar file that the Gramps Download -Manager installs in Gramps to use your addon automatically includes the -following files: -``` - *.py - *.glade - *.xml - *.txt - locale/*/LC_MESSAGES/*.mo -``` -Starting with Gramp 5.0, if you have files other than those listed above, -you should create a ```MANIFEST``` file in the root of your addon folder -that lists the files (or pattern) to be added, one per line, like this -sample ```MANIFEST``` file: -``` - README.md - extra_dir/* - help_files/docs/help.html -``` +The build automatically packages ```*.py```, ```*.glade```, ```*.xml```, +```*.txt```, and ```locale/*/LC_MESSAGES/*.mo```. Anything else (a +```README.md```, help files, extra directories) needs a ```MANIFEST``` +file in the addon root, one file or glob pattern per line (Gramps 5.0+). + +The build flow, ```MANIFEST``` semantics, and what lands in the +```.addon.tgz``` are in the manual: +[Packaging → What build packages](docs/addon-development/12-packaging.md#what-build-packages). > #### TIP > Starting with Gramps 6.0 (and _only_ 6.0) translations can be done on @@ -629,280 +530,65 @@ takes this general form: [PTYPE](https://github.com/gramps-project/gramps/blob/master/gramps/gen/plug/_pluginreg.py#L76) values include: TOOL, GRAMPLET, REPORT, QUICKVIEW (formerly QUICKREPORT), IMPORT, EXPORT, DOCGEN, GENERAL, MAPSERVICE, VIEW, RELCALC, SIDEBAR, DATABASE, RULE, -THUMBNAILER, and CITE. - -ATTR depends on the PTYPE. +THUMBNAILER, and CITE. ATTR depends on the PTYPE. -You must include a ```gramps_target_version``` and addon ```version``` values. -```gramps_target_version``` should be a string of the form "X.Y" matching -a Gramps X (major) and Y (minor) version. ```version``` is a string of -the form "X.Y.Z" representing the version of your addon; X, Y, and Z should -all be integers. +You must include ```gramps_target_version``` (a string "X.Y" matching the +Gramps major and minor version the addon targets) and the addon +```version``` (a string "X.Y.Z"). Include author name(s) and email(s) as +arrays of strings, and — new in Gramps 5.2 — optionally ```maintainers``` +/ ```maintainers_email``` when the maintainer differs from the author; the +maintainer is the primary point of contact. -Be sure to include attributes for author name(s) and email(s) in the form -of an array of comma-separated strings. +In the ```.gpr.py```, the function ```_``` is predefined by the plugin +loader to use your locale translations — mark text with ```_("TEXT")```, +never import ```_``` there. -There is an additional set of attributes, ```maintainers``` and -```maintainers_email``` (new in Gramps 5.2). If you, the author, are also -the maintainer it will be identical to the author attributes, but you may -also designate a maintainer, in which case the maintainer will become the -primary point of contact. - -Here is a sample Tool GPR file: -``` - register(TOOL, - id = 'AttachSource', - name = _("Attach Source"), - description = _("Attaches a shared source to multiple objects."), - version = '1.0.0', - gramps_target_version = '6.0', - status = STABLE, - fname = 'AttachSourceTool.py', - authors = ["Douglas S. Blank"], - authors_email = ["doug.blank@gmail.com"], - maintainers = ["Douglas S. Blank"], - maintainers_email = ["doug.blank@gmail.com"], - category = TOOL_DBPROC, - toolclass = 'AttachSourceWindow', - optionclass = 'AttachSourceOptions', - tool_modes = [TOOL_MODE_GUI], - help_url = "Addon:AttachSourceTool" - ) -``` - -You can see examples of the kinds of addons -[here](https://github.com/gramps-project/gramps/plugins) (such as -[gramps-project/gramps/plugins/drawreport/drawplugins.gpr.py](https://github.com/gramps-project/gramps/plugins/drawreport/drawplugins.gpr.py)) -and see the full documentation in the -[master/gramps/gen/plug/_pluginreg.py][https://github.com/gramps-project/gramps/blob/3f0db9303f29811b43325c30149c8844c7ce24b6/gramps/gen/plug/_pluginreg.py#L23) -comments and docstrings. - -Note that this example ```.gpr.py``` will automatically use translations -if you have them (see [Localization](#localization)). That is, the -function "_" is predefined to use your -locale translations; you only need to mark the text with ```_("TEXT")``` -and include a translation of "TEXT" in your translation file. For example, -in the above example, ```_("Attach Source")``` is marked for translation. -If you have developed and packaged your addon with translation support, -then that phrase will be converted into the user's language. +The manual documents every registration field, the discovery model, and a +complete example per kind: +[Fundamentals → The .gpr.py registration file](docs/addon-development/04-fundamentals.md#the-gprpy-registration-file) +and [Addon Kinds](docs/addon-development/03-addon-kinds.md). ### Report Plugins -The possible report categories are -[gramps/gen/plug/_pluginreg.py](https://github.com/gramps-project/gramps/blob/892fc270592095192947097d22a72834d5c70447/gramps/gen/plug/_pluginreg.py#L141-L149): -``` - #possible report categories - CATEGORY_TEXT = 0 - CATEGORY_DRAW = 1 - CATEGORY_CODE = 2 - CATEGORY_WEB = 3 - CATEGORY_BOOK = 4 - CATEGORY_GRAPHVIZ = 5 - CATEGORY_TREE = 6 - REPORT_CAT = [ CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_CODE, - CATEGORY_WEB, CATEGORY_BOOK, CATEGORY_GRAPHVIZ, CATEGORY_TREE] -``` - -Each report category has a set of standards and an interface. The categories -```CATEGORY_TEXT``` and ```CATEGORY_DRAW``` use the Document interface of -Gramps. See also -[Report API](https://gramps-project.org/wiki/index.php/Report_API) -for a draft view on this. - -The application programming interface or API for reports is treated in the -[report writing tutorial](https://gramps-project.org/wiki/index.php/Report-writing_tutorial). For general information on Gramps development, see -[Portal:Developers](https://gramps-project.org/wiki/index.php/Portal:Developers) -and [Writing a Plugin](https://gramps-project.org/wiki/index.php/Writing_a_plugin). +A REPORT registration declares one of the report categories +(```CATEGORY_TEXT```, ```CATEGORY_DRAW```, ```CATEGORY_WEB```, and so on — +defined in ```gramps/gen/plug/_pluginreg.py```); the text and draw +categories use Gramps' Document interface. + +The manual covers the Report/ReportOptions pair, the docgen abstraction, +and a complete text-report walkthrough: +[Addon Kinds → REPORT](docs/addon-development/03-addon-kinds.md) and +[Tutorials → A text Report](docs/addon-development/02-tutorials.md#a-text-report). +See also the +[report writing tutorial](https://gramps-project.org/wiki/index.php/Report-writing_tutorial) +on the wiki. ### General Plugins -The plugin framework also allows you to create generic plugins for use. -This includes the ability to create libraries of functions, and plugins -of your own design. - -#### Example: A library of functions -In this example, a file named ```library.py``` will be imported at the -time of registration (i.e., any time Gramps starts): -``` - # file: library.gpr.py - - register(GENERAL, - id = 'My Library', - name = _("My Library"), - description = _("Provides a library for doing something."), - version = '1.0', - gramps_target_version = '6.0', - status = STABLE, - fname = 'library.py', - load_on_reg = True, - ) -``` - -You can access the loaded module in other code by issuing an -```import library``` as Python keeps track of files already -imported. However, the amount of useful code that you can run -when the program is imported is limited. You might like to have -the code do something that requires a ```dbstate``` or ```uistate object```, -but neither of these is available when just importing a file. - -If ```load_on_reg``` was not ```True```, this code would be unavailable -until manually loaded. There is no mechanism in Gramps to load ```GENERAL``` -plugins automatically. - -In addition to importing a file at startup, you can also run a single -function inside a ```GENERAL``` plugin, and it will be passed the -```dbstate```, the ```uistate```, and the plugin data. The function -must be called ```load_on_reg```, and take those three parameters: -``` - # file: library.py - - def load_on_reg(dbstate, uistate, plugin): - """ - Runs when plugin is registered. - """ - print("Hello World!") -``` - -Here, you could connect signals to the ```dbstate```, open windows, etc. - -Another example of what you can do with the plugin interface is to create -a general purpose plugin framework for use by other plugins. Here is the -basis for a plugin system that: - -* allows plugins to list data files -* allows the plugin to process all of the data files - -First, the ```gpr.py``` file: -``` - register(GENERAL, - id = "ID", - category = "CATEGORY", - load_on_reg = True, - process = "FUNCTION_NAME", - ) -``` - -This example uses three new features: - -* ```GENERAL``` plugins can have a category -* ```GENERAL``` plugins can have a load_on_reg function that returns data -* ```GENERAL``` plugins can have a function (called ```process```) which -will process the data - -If you (or someone else) create additional general plugins of this category, -and they follow your ```load_on_reg``` data format API, then they could be -used just like your original data. For example, here is an additional -general plugin in the ```WEBSTUFF``` category: -``` - # anew.gpr.py - - register(GENERAL, - id = 'a new plugin', - category = "WEBSTUFF", - version = '1.0', - gramps_target_version = '6.0', - data = ["a", "b", "c"], - ) -``` - -This doesn't have ```load_on_reg = True```, nor does it have an ```fname``` or -```process```, but it does set the data directly in the ```.gpr.py``` file. -Then, we have the following results: -``` - >>> from gui.pluginmanager import GuiPluginManager - >>> PLUGMAN = GuiPluginManager.get_instance() - >>> PLUGMAN.get_plugin_data('WEBSTUFF') - ["a", "b", "c", "Stylesheet.css", "Another.css"] - >>> PLUGMAN.process_plugin_data('WEBSTUFF') - ["A", "B", "C", "STYLESHEET.CSS", "ANOTHER.CSS"] -``` +```GENERAL``` is the escape hatch for plugin code that doesn't fit any +other kind: shared function libraries (imported at startup with +```load_on_reg = True``` and then available to other addons via a plain +```import```), and pluggable categories such as ```WEBSTUFF``` (narrative +website stylesheets) and ```Filters``` (filter-rule providers). + +The manual documents both uses and the full plugin-data API — the +```load_on_reg(dbstate, uistate, plugin)``` function form, the ```data``` +and ```process``` registration fields, and querying by category through +the plugin manager: +[Addon Kinds → GENERAL](docs/addon-development/03-addon-kinds.md). ### Registered GENERAL Categories -The following are examples of the published secondary plugin categories of -APIs of type ```GENERAL```. - -#### WEBSTUFF -A sample ```gpr.py``` file: -``` - # stylesheet.gpr.py - - register(GENERAL, - id = 'system stylesheets', - category = "WEBSTUFF", - name = _("CSS Stylesheets"), - description = _("Provides a collection of stylesheets for the web"), - version = '1.0', - gramps_target_version = '6.0', - fname = "stylesheet.py", - load_on_reg = True, - process = "process_list", - ) -``` - -Here is the associated program: -``` - # file: stylesheet.py - - def load_on_reg(dbstate, uistate, plugin): - """ - Runs when plugin is registered. - """ - return ["Stylesheet.css", "Another.css"] - - def process_list(files): - return [file.upper() for file in files] -``` - -#### Filters -For example, ```gpr.py```: -``` - register(GENERAL, - category="Filters", - ... - load_on_reg = True - ) -``` -And the actual plugin: -``` - def load_on_reg(dbstate, uistate, plugin): - # returns a function that takes a namespace, 'Person', 'Family', etc. - - def filters(namespace): - print("Ok...", plugin.category, namespace, uistate) - # return a Filter object here - - return filters -``` +The published ```GENERAL``` categories — ```WEBSTUFF``` and ```Filters``` +— with sample registrations and implementations, are covered in +[Addon Kinds → GENERAL](docs/addon-development/03-addon-kinds.md). ### List Your Addon Prerequistes -In your ```.gpr.py``` file, you can have a line like: -``` - ... - depends_on = ["libwebconnect"], - ... -``` - -which is a list of plug-in identifiers from other ```.gpr.py``` files. -This example will ensure that -[libwebconnect](https://gramps-project.org/wiki/index.php/Addon:Web_Connect_Pack#Prerequisites) -is loaded before your addon. If that ID can't be found, or you have a cycle -(a circular import), then your addons won't be loaded. The Gramps architect -summarizes this as: "The ```depends_on``` list is used to specify other plugins -which the plugin depends on. These will be installed automatically." - -Example code in the Addon:Web_Connect_Pack that references ```libwebconnect``` -prerequistes can be seen in -[addons-source/RUWebPack.gpr.py#L17](https://github.com/gramps-project/addons-source/blob/1304b65a7d758bfe17339c26260473ac3e9c4061/RUWebConnectPack/RUWebPack.gpr.py#L17). +```depends_on = ["libwebconnect"]``` in a ```.gpr.py``` lists the ids of +other plugins that must load first (they are installed automatically); +```requires_mod```, ```requires_gi```, and ```requires_exe``` (Gramps 5.2+) +declare Python-module, GObject-introspection, and executable prerequisites. -This allows common prerequisites to be shared between addons. Code can be -maintained in its own ```.gpr.py```/addon file instead of trying to -synchronize the maintenance of multiple copies across various silos. - -Additional requirements properties were implemented starting with the -Gramps 5.2 -[Registration Options](https://gramps-project.org/wiki/index.php/Gramplets_development#Register_Options) that provide for specifying plug-in preqrequisites: - -* For modules: [```requires_mod```](https://github.com/gramps-project/gramps/blob/0f8d4ecd429431b4df64910962f8764af9ff1766/gramps/gen/plug/_pluginreg.py#L689-L719) -* For GObject introspection: [```requires_gi```](https://github.com/gramps-project/gramps/blob/0f8d4ecd429431b4df64910962f8764af9ff1766/gramps/gen/plug/_pluginreg.py#L689-L719) -* For executables: [```requires_exe```](https://github.com/gramps-project/gramps/blob/0f8d4ecd429431b4df64910962f8764af9ff1766/gramps/gen/plug/_pluginreg.py#L689-L719) +Declaration rules — importable module names, verifying entries, version +pins — are in the manual: +[Fundamentals → Declaring dependencies](docs/addon-development/04-fundamentals.md#declaring-dependencies). ## Review the Addon Checklist Before you publish your new addon, review this checklist for completeness: @@ -915,6 +601,10 @@ Before you publish your new addon, review this checklist for completeness: * Has the help_url been changed from the GitHub repository to the wiki page? +The normative MUST / SHOULD / MAY rules a reviewer holds an addon to — +structure, runtime, testing, translation, and the contributor workflow — +are in the manual: [Guidelines](docs/addon-development/16-guidelines.md). + ## Create a Pull Request Once you have created your addon, built the ```.gpr.py``` registration file, and have tested it (you *did* test it, right?) so that you're sure @@ -1129,42 +819,30 @@ Now it is time to announce your addon to those who may not have heard about it yet. ### Gramps Forum -Join the [Gramps Forum](#https://gramps-project.org/wiki/index.php/Contact#Forum) if you have not already. Announce your addon to forum users with general -information on why you created it, what it does for the user, and how to use -it. +Join the [Gramps Forum](https://gramps.discourse.group/) if you have not +already. Announce your addon to forum users with general information on +why you created it, what it does for the user, and how to use it. ### Gramps Wiki Create an account on the -[Gramps Wiki](#https://gramps-project.org/wiki/index.php/Main_page) +[Gramps Wiki](https://gramps-project.org/wiki/index.php/Main_page) if you don't already have one. #### List Your Addon Add a short description of your addon to the Addons list in the wiki by -editing the current release listing: i.e., +editing the current release listing: i.e., [6.0_Addons](https://gramps-project.org/wiki/index.php/6.0_Addons), or if the addon is meant for a future release, [6.1_Addons](https://gramps-project.org/wiki/index.php/6.1_Addons) when available. Examine other addon entries when editing the wiki page, and refer to the -[Addon list legend]]](https://gramps-project.org/wiki/index.php/Addon_list_legend) -list legend]] to understand the meaning of each column. When ready, use the -following template to include your addon in the list: -``` -|- -| -| -| -| -| -| -| -| -|- -``` +[Addon list legend](https://gramps-project.org/wiki/index.php/Addon_list_legend) +to understand the meaning of each column. The row template to copy is in +the manual: [Community → List your addon](docs/addon-development/13-community.md#list-your-addon). #### Document Your Addon -Document your addon in the wiki using the page name format -**Addon:NewProjectName**. Examine some of the other addon documentaion +Document your addon in the wiki using the page name format +**Addon:NewProjectName**. Examine some of the other addon documentation pages for suggestions, and for the general format to use. > ##### TIP @@ -1173,30 +851,9 @@ pages for suggestions, and for the general format to use. > results page you will be provided with a link to create the new page. > Select that link to add your content. -Consider including the following information in your wiki page: - -``` - -{{Third-party plugin}} - - -== Usage == - -=== Configure Options === - -==Features== - -== Prerequisites == - -== Issues == - - -[[Category:Addons]] -[[Category:Plugins]] -[[Category:Developers/General]] -``` +The conventional page skeleton (the ```{{Third-party plugin}}``` banner and +the standard sections) is in the manual: +[Community → Document your addon](docs/addon-development/13-community.md#document-your-addon). ## Support Your Addon Through Bug Tracker Create a user account on the @@ -1233,6 +890,12 @@ often before being officially accepted. core, but are loved by many users (e.g., the Data Entry Gramplet). * A place for experimental components to live. +The technical side of keeping an addon working across Gramps releases — +```gramps_target_version``` semantics, the per-release deltas that bite +ports, and the porting checks — is in the manual: +[Compatibility](docs/addon-development/14-compatibility.md) and +[What's New](docs/addon-development/15-whats-new.md). + ### Examples of Common Enhancements And here are just some of the kinds of enhancements that might make sense: @@ -1277,6 +940,8 @@ Also you may want to [[Addons_development#Package_your_addon |Package your addon --> ## Resources +* [Addon Development manual](docs/addon-development/README.md) — the +in-repo technical reference this document links throughout. * [Brief introduction to Git](https://gramps-project.org/wiki/index.php/Brief_introduction_to_git) * [Getting started with Gramps development](https://gramps-project.org/wiki/index.php/Getting_started_with_Gramps_development) * [Portal:Developers](https://gramps-project.org/wiki/index.php/Portal:Developers) @@ -1289,6 +954,8 @@ Also you may want to [[Addons_development#Package_your_addon |Package your addon * For 4.1.x and earlier, see [Addons development old](https://gramps-project.org/wiki/index.php/Addons_development_old). ## Addon Development Tutorials and Samples +* [Tutorials](docs/addon-development/02-tutorials.md) — in-repo end-to-end +walkthroughs, one per addon kind (Gramplet, Tool, Report, Quick View, Rule). * [Develop an Addon Gramplet](https://gramps-project.org/wiki/index.php/Gramplets_development) (or add a [custom filtering option](https://gramps.discourse.group/t/looking-for-an-example-of-a-gramplet-with-a-custom-filter-configuration-option/5967)) * [Develop_an_Addon_Rule](https://gramps-project.org/wiki/index.php/Develop_an_Addon_Rule) for custom filters * [Develop_an_Addon_Tool](https://gramps-project.org/wiki/index.php/Develop_an_Addon_Tool) diff --git a/CalculateEstimatedDates/po/da-local.po b/CalculateEstimatedDates/po/da-local.po index 0e41cd6d2..0ba3acb20 100644 --- a/CalculateEstimatedDates/po/da-local.po +++ b/CalculateEstimatedDates/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:04-0700\n" -"PO-Revision-Date: 2026-04-28 18:11+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Select filter to restrict people" msgstr "Vælg filter til personafgrænsning" @@ -171,6 +171,10 @@ msgstr "Fjerner \"%s\" ..." msgid "done!\n" msgstr "udført!\n" +#, python-format +msgid "Skipped %d people due to errors (see log).\n" +msgstr "Sprang over %d personer på grund af fejl (se log).\n" + msgid "" "Selecting... \n" "\n" @@ -226,6 +230,10 @@ msgstr "Udført! Gemmer....." msgid "Added %d events." msgstr "Tilføjet %d hændelser." +#, python-format +msgid " (Skipped %d rows due to errors; see log.)" +msgstr " (Sprang over %d rækker på grund af fejl: se log.)" + msgid "Estimated date" msgstr "Anslået dato" diff --git a/CalculateEstimatedDates/po/es-local.po b/CalculateEstimatedDates/po/es-local.po index 48aa39172..b6bb54bbc 100644 --- a/CalculateEstimatedDates/po/es-local.po +++ b/CalculateEstimatedDates/po/es-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: GRAMPS 3.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:04-0700\n" -"PO-Revision-Date: 2026-05-04 21:37+0000\n" -"Last-Translator: Francisco Serrador \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-24 05:14+0000\n" +"Last-Translator: Juan Saavedra \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Select filter to restrict people" msgstr "Seleccione filtro para restringir las personas" @@ -175,6 +175,10 @@ msgstr "Retira «%s»…" msgid "done!\n" msgstr "¡hecho!\n" +#, python-format +msgid "Skipped %d people due to errors (see log).\n" +msgstr "Se omitieron %d personas debido a errores (ver log).\n" + msgid "" "Selecting... \n" "\n" @@ -230,6 +234,10 @@ msgstr " ¡Listo! Efectuando cambios…" msgid "Added %d events." msgstr "Se añadieron %d eventos." +#, python-format +msgid " (Skipped %d rows due to errors; see log.)" +msgstr " (Se omitieron %d filas debido a errores; ver log.)" + msgid "Estimated date" msgstr "Fecha estimada" diff --git a/CalculateEstimatedDates/po/fi-local.po b/CalculateEstimatedDates/po/fi-local.po index aea2930f5..bac19da46 100644 --- a/CalculateEstimatedDates/po/fi-local.po +++ b/CalculateEstimatedDates/po/fi-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-05-05 14:44+0000\n" -"Last-Translator: Matti Niemelä \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.12-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" msgid "Select filter to restrict people" @@ -175,6 +175,10 @@ msgstr "Poistetaan '%s'..." msgid "done!\n" msgstr "valmis!\n" +#, python-format +msgid "Skipped %d people due to errors (see log).\n" +msgstr "%d henkilöä ohitettiin virheiden vuoksi (katso loki).\n" + msgid "" "Selecting... \n" "\n" @@ -230,6 +234,10 @@ msgstr " Tehty! Talletetaan ..." msgid "Added %d events." msgstr "%d tapahtumaa lisätty." +#, python-format +msgid " (Skipped %d rows due to errors; see log.)" +msgstr " (%d riviä ohitettu virheiden vuoksi; katso loki.)" + msgid "Estimated date" msgstr "Arvioitu päivä" diff --git a/ChatWithTree/po/da-local.po b/ChatWithTree/po/da-local.po new file mode 100644 index 000000000..a7f1397fb --- /dev/null +++ b/ChatWithTree/po/da-local.po @@ -0,0 +1,52 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" +"Last-Translator: Kaj Arne Mikkelsen \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "Tree: '{}'" +msgstr "Træ: '{}'" + +msgid "Chat With Tree Interactive Addon" +msgstr "Chat med Tree Interactive-tilføjelsesprogrammet" + +msgid "" +"Chat With Tree with the help of AI Large Language Model, needs litellm module" +msgstr "" +"Chat med Træ ved hjælp af AI Large Language Model, hat behov for litellm " +"modulet" + +msgid "Chat With Tree" +msgstr "Chat med træ" + +msgid "Type a message..." +msgstr "Skriv en besked..." + +msgid "Send" +msgstr "Send" + +msgid "Chat with Tree initialized. Type /help for help." +msgstr "Chat med træ er påbegyndt. Tast /help for hjælp." + +msgid "" +"The ChatWithTree addon is not yet initialized. Please " +"reload Gramps or select a database." +msgstr "" +"ChatWithTree tillægget er endnu ikke initialiseret. " +"Genstart venligst Gramps eller vælg en database." + +msgid "The chatbot is currently processing a query. Please wait." +msgstr "Chatbotten behandler for øjeblikket et spørgsmål. Vent venligst." + +msgid "An error occurred while processing your query." +msgstr "En fejl opstod ved behandling af dit spørgsmål." diff --git a/ChatWithTree/po/es-local.po b/ChatWithTree/po/es-local.po index a918b6004..6033db14e 100644 --- a/ChatWithTree/po/es-local.po +++ b/ChatWithTree/po/es-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: GRAMPS 3.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:04-0700\n" -"PO-Revision-Date: 2026-05-04 21:37+0000\n" -"Last-Translator: Francisco Serrador \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-24 05:14+0000\n" +"Last-Translator: Juan Saavedra \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Tree: '{}'" msgstr "Árbol: '{}'" @@ -34,3 +34,19 @@ msgstr "Teclee un mensaje…" msgid "Send" msgstr "Enviar" + +msgid "Chat with Tree initialized. Type /help for help." +msgstr "Chat con Árbol Inicializado. Teclee /help para ayuda." + +msgid "" +"The ChatWithTree addon is not yet initialized. Please " +"reload Gramps or select a database." +msgstr "" +"La extensión ChatWithTree no está aún inicializada. " +"Recargue Gramps o seleccione una base de datos." + +msgid "The chatbot is currently processing a query. Please wait." +msgstr "El chatbot está actualmente procesando una consulta. Por favor espere." + +msgid "An error occurred while processing your query." +msgstr "Se produjo un error al procesar su consulta." diff --git a/ChatWithTree/po/fi-local.po b/ChatWithTree/po/fi-local.po index bdb74a91c..59d2c5037 100644 --- a/ChatWithTree/po/fi-local.po +++ b/ChatWithTree/po/fi-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:04-0700\n" -"PO-Revision-Date: 2026-04-20 04:09+0000\n" -"Last-Translator: Matti Niemelä \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" msgid "Tree: '{}'" @@ -35,3 +35,20 @@ msgstr "Kirjoita viesti..." msgid "Send" msgstr "Lähetä" + +msgid "Chat with Tree initialized. Type /help for help." +msgstr "" +"Keskustelu sukupuun kanssa on aloitettu. Kirjoita /help saadaksesi apua." + +msgid "" +"The ChatWithTree addon is not yet initialized. Please " +"reload Gramps or select a database." +msgstr "" +"ChatWithTree-lisäosaa ei ole vielä alustettu. Lataa Gramps uudelleen tai " +"valitse tietokanta." + +msgid "The chatbot is currently processing a query. Please wait." +msgstr "Chatbot käsittelee parhaillaan kyselyä. Odota." + +msgid "An error occurred while processing your query." +msgstr "Virhe kyselysi käsittelyssä." diff --git a/ChatWithTree/po/tr-local.po b/ChatWithTree/po/tr-local.po index 1530ab5a1..f9c445a97 100644 --- a/ChatWithTree/po/tr-local.po +++ b/ChatWithTree/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-07-03 03:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.1.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -29,6 +29,9 @@ msgstr "" "Chat With Tree, Yapay Zeka Büyük Dil Modeli yardımıyla çalışır ve litellm " "modülü gerektirir" +msgid "Chat With Tree" +msgstr "Ağaçla Sohbet Et" + msgid "Type a message..." msgstr "Bir mesaj yazın..." diff --git a/CiteEnhanced/po/da-local.po b/CiteEnhanced/po/da-local.po index f2f3a4cf0..ab42c0fa3 100644 --- a/CiteEnhanced/po/da-local.po +++ b/CiteEnhanced/po/da-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-06 08:56-0800\n" -"PO-Revision-Date: 2025-09-01 17:02+0000\n" -"Last-Translator: Rasmus Cornelius Nielsen \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" +"Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" "Language: da\n" @@ -12,7 +12,14 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.13.1-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Enhanced" msgstr "Forbedret" + +msgid "" +"An enhanced citation formatter that adds a repository and call number to the " +"standard functionality." +msgstr "" +"En udvidet kildehenvisningsformatérer, der tilføjer et arkiv og " +"samtalenummer til standardfunktionen." diff --git a/ClipboardGramplet/po/he-local.po b/ClipboardGramplet/po/he-local.po index ab4abfbcf..01a54384c 100644 --- a/ClipboardGramplet/po/he-local.po +++ b/ClipboardGramplet/po/he-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Gramps 5.2.0 – mediamerge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:05-0700\n" -"PO-Revision-Date: 2026-02-20 09:09+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Avi Markovitz \n" "Language-Team: Hebrew \n" @@ -13,10 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 5.16.1-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Collections Clipboard" msgstr "לוח־גזירים אוספים" msgid "Gramplet for grouping collections of items to aid in data entry." -msgstr "גרמפלט לקיבוץ אוספי פריטים לסיוע בהזנת נתונים." +msgstr "גרמפלט לקיבוץ אוספי פריטים שיסיעו בהזנת נתונים." diff --git a/CombinedView/po/da-local.po b/CombinedView/po/da-local.po index 46cbffb0e..5fb67c01d 100644 --- a/CombinedView/po/da-local.po +++ b/CombinedView/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-02-25 16:12+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" #, python-format msgid "%(abbrev)s %(date)s in %(place)s" @@ -22,6 +22,9 @@ msgstr "%(abbrev)s %(date)s i %(place)s" msgid "%(abbrev)s %(date)s%(place)s" msgstr "%(abbrev)s %(date)s%(place)s" +msgid "Add existing child to family" +msgstr "Tilføj eksisterende barn til familien" + #, python-format msgid "%(event_type)s: %(date)s in %(place)s" msgstr "%(event_type)s: %(date)s in %(place)s" diff --git a/CombinedView/po/de-local.po b/CombinedView/po/de-local.po index aaebf951a..be35f9125 100644 --- a/CombinedView/po/de-local.po +++ b/CombinedView/po/de-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-05-05 14:44+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Mirko Leonhäuser \n" "Language-Team: German \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.12-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" #, python-format msgid "%(abbrev)s %(date)s in %(place)s" @@ -22,6 +22,9 @@ msgstr "%(abbrev)s %(date)s in %(place)s" msgid "%(abbrev)s %(date)s%(place)s" msgstr "%(abbrev)s %(date)s%(place)s" +msgid "Add existing child to family" +msgstr "Vorhandenes Kind zur Familie hinzufügen" + #, python-format msgid "%(event_type)s: %(date)s in %(place)s" msgstr "%(event_type)s: %(date)s in %(place)s" diff --git a/CombinedView/po/he-local.po b/CombinedView/po/he-local.po index 60f3aa4eb..fb151da48 100644 --- a/CombinedView/po/he-local.po +++ b/CombinedView/po/he-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Gramps 5.2.0 – mediamerge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-08-11 18:01+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Avi Markovitz \n" "Language-Team: Hebrew \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 5.13-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" #, python-format msgid "%(abbrev)s %(date)s in %(place)s" @@ -23,6 +23,9 @@ msgstr "%(abbrev)s %(date)s ב־%(place)s" msgid "%(abbrev)s %(date)s%(place)s" msgstr "%(abbrev)s %(date)s%(place)s" +msgid "Add existing child to family" +msgstr "הוספת צאצאים קיימים למשפחה" + #, python-format msgid "%(event_type)s: %(date)s in %(place)s" msgstr "%(event_type)s: %(date)s ב־ %(place)s" diff --git a/CombinedView/po/nl-local.po b/CombinedView/po/nl-local.po index 435bba6d0..00f7976fd 100644 --- a/CombinedView/po/nl-local.po +++ b/CombinedView/po/nl-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: MediaMerge 5.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-04-14 22:32+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-03 04:01+0000\n" "Last-Translator: Stephan Paternotte \n" "Language-Team: Dutch \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.11-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" #, python-format msgid "%(abbrev)s %(date)s in %(place)s" @@ -22,6 +22,9 @@ msgstr "%(abbrev)s %(date)s in %(place)s" msgid "%(abbrev)s %(date)s%(place)s" msgstr "%(abbrev)s %(date)s%(place)s" +msgid "Add existing child to family" +msgstr "Bestaand kind aan gezin toevoegen" + #, python-format msgid "%(event_type)s: %(date)s in %(place)s" msgstr "%(event_type)s: %(date)s in %(place)s" diff --git a/CombinedView/po/pt_PT-local.po b/CombinedView/po/pt_PT-local.po index ec4b4858e..381e89d6e 100644 --- a/CombinedView/po/pt_PT-local.po +++ b/CombinedView/po/pt_PT-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gramps51\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-03-08 07:05+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-03 04:01+0000\n" "Last-Translator: Pedro Albuquerque \n" "Language-Team: Portuguese (Portugal) \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.3-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" #, python-format msgid "%(abbrev)s %(date)s in %(place)s" @@ -22,6 +22,9 @@ msgstr "%(abbrev)s %(date)s em %(place)s" msgid "%(abbrev)s %(date)s%(place)s" msgstr "%(abbrev)s %(date)s%(place)s" +msgid "Add existing child to family" +msgstr "Adicionar filho existente à família" + #, python-format msgid "%(event_type)s: %(date)s in %(place)s" msgstr "%(event_type)s: %(date)s em %(place)s" diff --git a/CombinedView/po/sk-local.po b/CombinedView/po/sk-local.po index f3c63b681..04d6cdab6 100644 --- a/CombinedView/po/sk-local.po +++ b/CombinedView/po/sk-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: GRAMPS 3.1.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2026-05-11 10:34+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:02+0000\n" "Last-Translator: Milan \n" "Language-Team: Slovak \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" -"X-Generator: Weblate 2026.5-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" #, python-format msgid "%(abbrev)s %(date)s in %(place)s" @@ -22,6 +22,9 @@ msgstr "%(abbrev)s %(date)s in %(place)s" msgid "%(abbrev)s %(date)s%(place)s" msgstr "%(abbrev)s %(date)s%(place)s" +msgid "Add existing child to family" +msgstr "Pridať existujúce dieťa k rodine" + #, python-format msgid "%(event_type)s: %(date)s in %(place)s" msgstr "%(event_type)s: %(date)s v %(place)s" diff --git a/CombinedView/po/sv-local.po b/CombinedView/po/sv-local.po index 820e8fe19..fc5f7b6cf 100644 --- a/CombinedView/po/sv-local.po +++ b/CombinedView/po/sv-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2026-04-07 13:46+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-03 04:02+0000\n" "Last-Translator: Pär Ekholm \n" "Language-Team: Swedish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" #, python-format msgid "%(abbrev)s %(date)s in %(place)s" @@ -22,6 +22,9 @@ msgstr "%(abbrev)s %(date)s i %(place)s" msgid "%(abbrev)s %(date)s%(place)s" msgstr "%(abbrev)s %(date)s%(place)s" +msgid "Add existing child to family" +msgstr "Lägg till befintligt barn i familjen" + #, python-format msgid "%(event_type)s: %(date)s in %(place)s" msgstr "%(event_type)s: %(date)s i %(place)s" diff --git a/CombinedView/po/tr-local.po b/CombinedView/po/tr-local.po index 9d4e926db..27c5da92b 100644 --- a/CombinedView/po/tr-local.po +++ b/CombinedView/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-07-03 03:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.1.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -21,16 +21,34 @@ msgstr "" msgid "%(abbrev)s %(date)s in %(place)s" msgstr "%(abbrev)s %(date)s > %(place)s" +#, python-format +msgid "%(abbrev)s %(date)s%(place)s" +msgstr "%(abbrev)s %(date)s%(place)s" + +msgid "Add existing child to family" +msgstr "Mevcut çocuğu aileye ekle" + #, python-format msgid "%(event_type)s: %(date)s in %(place)s" msgstr "%(event_type)s: %(date)s > %(place)s" +#, python-format +msgid "%(event_type)s: %(date)s" +msgstr "%(event_type)s: %(date)s" + +#, python-format +msgid "%(event_type)s: %(place)s" +msgstr "%(event_type)s: %(place)s" + msgid "Click to make this event active" msgstr "Bu etkinliği etkinleştirmek için tıklayın" msgid "Click to visit this link" msgstr "Bu bağlantıyı ziyaret etmek için tıklayın" +msgid ": " +msgstr ": " + msgid "Combined" msgstr "Birleştirilmiş" diff --git a/D3Charts/po/da-local.po b/D3Charts/po/da-local.po index 397f7ac70..248c5a1a9 100644 --- a/D3Charts/po/da-local.po +++ b/D3Charts/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:05-0700\n" -"PO-Revision-Date: 2026-04-28 18:11+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +#, python-brace-format +msgid "Failure writing {target_path}: {message}" +msgstr "Fejl ved skrivning til: {target_path}:{message}" #, python-format msgid "Failed to create directory structure : %s" @@ -68,6 +72,11 @@ msgstr "" "Danner e web side med en grafisk repræsentation af aner (SVG) repræsenteret " "som en viftetavle fra D3.js JavaScript bibliotek." +#, python-format +msgctxt "spouse" +msgid "See %(reference)s : %(spouse)s" +msgstr "Se %(reference)s : %(spouse)s" + msgid "Generating report..." msgstr "Danner rapporten..." @@ -85,6 +94,10 @@ msgstr "" "Målfolder %s findes ikke\n" "Vil du forsøge at danne den?" +#, python-brace-format +msgid "Failed to create {target_path}: {message}" +msgstr "Kunne ikke danne {target_path}:{message}" + #, python-format msgid "" "Destination file %s already exists.\n" diff --git a/D3Charts/po/fi-local.po b/D3Charts/po/fi-local.po index 8766f4eed..2163ac086 100644 --- a/D3Charts/po/fi-local.po +++ b/D3Charts/po/fi-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:05-0700\n" -"PO-Revision-Date: 2026-04-20 04:09+0000\n" -"Last-Translator: Matti Niemelä \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" #, python-brace-format @@ -73,6 +73,11 @@ msgstr "" "Luo verkkosivun, jossa on graafinen esitys esi-isistä (SVG) viuhkakaaviona " "käyttäen D3.js JavaScript -kirjastoja." +#, python-format +msgctxt "spouse" +msgid "See %(reference)s : %(spouse)s" +msgstr "Katso %(reference)s : %(spouse)s" + msgid "Generating report..." msgstr "Raporttia luodaan..." diff --git a/D3Charts/po/it-local.po b/D3Charts/po/it-local.po index 4205466f3..479efe95a 100644 --- a/D3Charts/po/it-local.po +++ b/D3Charts/po/it-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: gramps 3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-06-17 20:01+0000\n" -"Last-Translator: Paolo Zamponi \n" +"PO-Revision-Date: 2026-07-31 16:24+0000\n" +"Last-Translator: medardo \n" "Language-Team: Italian \n" "Language: it\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2026.7.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" #, python-brace-format msgid "Failure writing {target_path}: {message}" @@ -177,6 +177,9 @@ msgstr "" "Indica se generare automaticamente collegamenti HTML per ogni nodo del " "resoconto." +msgid "URL prefix path." +msgstr "Percorso del prefisso URL." + msgid "URL prefix to apply to each auto-generated HREF link." msgstr "" "Prefisso dell'URL da applicare ad ogni collegamento HREF generato " diff --git a/D3Charts/po/tr-local.po b/D3Charts/po/tr-local.po index 2673e51ec..07e31042d 100644 --- a/D3Charts/po/tr-local.po +++ b/D3Charts/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-07-03 03:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.1.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -202,9 +202,21 @@ msgstr "URL dosya uzantısı" msgid "No file extension." msgstr "Dosya uzantısı yok." +msgid ".html" +msgstr ".html" + msgid ".htm" msgstr ".htm" +msgid ".shtml" +msgstr ".shtml" + +msgid ".php" +msgstr ".php" + +msgid ".php3" +msgstr ".php3" + msgid ".cgi" msgstr ".cgi" diff --git a/DEWebConnectPack/po/da-local.po b/DEWebConnectPack/po/da-local.po index 531b57fa6..ff4e1fbe0 100644 --- a/DEWebConnectPack/po/da-local.po +++ b/DEWebConnectPack/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-06 08:57-0800\n" -"PO-Revision-Date: 2025-02-25 16:12+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,34 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "DE Web Connect Pack" +msgstr "DE Web Connect Pack" + +msgid "Collection of Web sites for the DE (requires libwebconnect)" +msgstr "Samling af Web steder for DE (kræver libwebconnect)" + +msgid "Bielefeld Academic Search" +msgstr "Akademisk søgning i Bielefeld" msgid "FamilySearch.org" msgstr "FamilySearch.org" + +msgid "Google Archives" +msgstr "Google arkiv" + +msgid "DE Google" +msgstr "DE Google" + +msgid "Open Library" +msgstr "Open Library" + +msgid "Surname map (1890-1996)" +msgstr "Efternavnskort (1890-1996)" + +msgid "GenWiki" +msgstr "GenWiki" + +msgid "German digital library" +msgstr "Det Tyske digitale bibliotek" diff --git a/DEWebConnectPack/po/tr-local.po b/DEWebConnectPack/po/tr-local.po index 59353693f..5775cb668 100644 --- a/DEWebConnectPack/po/tr-local.po +++ b/DEWebConnectPack/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-07-03 03:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.1.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -26,9 +26,15 @@ msgstr "DE için web siteleri koleksiyonu (libwebconnect gerektirir)" msgid "Bielefeld Academic Search" msgstr "Bielefeld Akademik Arama" +msgid "FamilySearch.org" +msgstr "FamilySearch.org" + msgid "Google Archives" msgstr "Google Arşivleri" +msgid "DE Google" +msgstr "DE Google" + msgid "Open Library" msgstr "Open Library" diff --git a/DNA/po/da-local.po b/DNA/po/da-local.po index dff8c3f32..9f4636f85 100644 --- a/DNA/po/da-local.po +++ b/DNA/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-02-25 16:12+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Chromosome " msgstr "Kromosom " @@ -23,6 +23,12 @@ msgstr " Kort for" msgid "Chr" msgstr "Kr" +msgid "Legend" +msgstr "Tegnforklaring" + +msgid ": Grandparent" +msgstr ":Bedsteforælder" + #, python-brace-format msgid "" "\n" @@ -36,13 +42,32 @@ msgstr "" msgid " SNPs" msgstr " SNPs" +msgid " : Starts at " +msgstr " : Begynder ved " + msgid " and ends at " msgstr " og slutter ved " +#, python-brace-format +msgid "{0}" +msgstr "{0}" + #, python-format msgid "%(ancestor1)s and %(ancestor2)s" msgstr "%(ancestor1)s og %(ancestor2)s" +#, python-brace-format +msgid "" +"\n" +"Relationship: {0} " +msgstr "" +"\n" +"Slægtskab:{0} " + +#, python-brace-format +msgid " Ancestor: {0}" +msgstr " Ane:{0}" + msgid "" "Click to make this person active\n" "Right-click to edit this person" diff --git a/DNA/po/tr-local.po b/DNA/po/tr-local.po index bef82866a..f28e096f2 100644 --- a/DNA/po/tr-local.po +++ b/DNA/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-07-03 03:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.1.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -51,6 +51,10 @@ msgstr " : Başlangıç noktası " msgid " and ends at " msgstr " ve bitiş noktası " +#, python-brace-format +msgid "{0}" +msgstr "{0}" + #, python-format msgid "%(ancestor1)s and %(ancestor2)s" msgstr "%(ancestor1)s ve %(ancestor2)s" diff --git a/DNAMatches/po/tr-local.po b/DNAMatches/po/tr-local.po index 77954f56f..96e7bd8f0 100644 --- a/DNAMatches/po/tr-local.po +++ b/DNAMatches/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-07-03 03:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.1.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -24,7 +24,7 @@ msgid "Gramplet to display a list of DNA matches" msgstr "DNA eşleşmelerinin listesini görüntülemek için Gramplet" msgid "Pers." -msgstr "Birey" +msgstr "Kişi" msgid "Rel." msgstr "İlişki" @@ -62,5 +62,11 @@ msgstr "Seçilen ilişkiyi düzenlemek için sağ tıklayın." msgid "LEGEND" msgstr "KİTABE" +msgid "=" +msgstr "=" + msgid "Not specified" msgstr "Belirtilmemiş" + +msgid "cM" +msgstr "cM" diff --git a/DataEntryGramplet/po/da-local.po b/DataEntryGramplet/po/da-local.po index a229c2a5e..04ff1ff8c 100644 --- a/DataEntryGramplet/po/da-local.po +++ b/DataEntryGramplet/po/da-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-06 08:57-0800\n" -"PO-Revision-Date: 2025-09-01 17:02+0000\n" -"Last-Translator: Rasmus Cornelius Nielsen \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" +"Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" "Language: da\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.13.1-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Data Entry Gramplet" msgstr "Dataindtastnings Gramplet" @@ -77,10 +77,19 @@ msgstr "Kopier Aktive Data" msgid "in" msgstr "i" +msgid "No Family Tree is open." +msgstr "Ingen slægtsbog er åben." + +msgid "Please open a Family Tree to edit data." +msgstr "Åben venligst en slægtsbog for at redigere data." + #, python-format msgid "Gramplet Data Edit: %s" msgstr "Gramplet Data rettelse: %s" +msgid "Please open a Family Tree before adding a person." +msgstr "Åben venligst en slægtsbog før du tilføjer en person." + msgid "Please provide a name." msgstr "Angiv venligst et navn." diff --git a/DataEntryGramplet/po/es-local.po b/DataEntryGramplet/po/es-local.po index 6bbe3d32c..f0274280d 100644 --- a/DataEntryGramplet/po/es-local.po +++ b/DataEntryGramplet/po/es-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: GRAMPS 3.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:04-0700\n" -"PO-Revision-Date: 2026-05-04 21:37+0000\n" -"Last-Translator: Francisco Serrador \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-24 05:14+0000\n" +"Last-Translator: Juan Saavedra \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Data Entry Gramplet" msgstr "Apunte de datos Gramplet" @@ -77,10 +77,19 @@ msgstr "Copiar datos activos" msgid "in" msgstr "en" +msgid "No Family Tree is open." +msgstr "No hay ningún Árbol Genealógico abierto." + +msgid "Please open a Family Tree to edit data." +msgstr "Por favor abra un Árbol Genealógico para editar datos." + #, python-format msgid "Gramplet Data Edit: %s" msgstr "Editar datos abuelo: %s" +msgid "Please open a Family Tree before adding a person." +msgstr "Por favor abra un Árbol Genealógico antes de añadir una persona." + msgid "Please provide a name." msgstr "Proporcione un nombre." diff --git a/DataEntryGramplet/po/fi-local.po b/DataEntryGramplet/po/fi-local.po index 9884b74da..afcded7f5 100644 --- a/DataEntryGramplet/po/fi-local.po +++ b/DataEntryGramplet/po/fi-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-06 08:57-0800\n" -"PO-Revision-Date: 2025-06-06 13:09+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" "Last-Translator: Juha Mäkeläinen \n" "Language-Team: Finnish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.12-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" msgid "Data Entry Gramplet" @@ -78,10 +78,19 @@ msgstr "Kopioi aktiiviset tiedot" msgid "in" msgstr "paikassa" +msgid "No Family Tree is open." +msgstr "Sukupuuta ei ole avattu." + +msgid "Please open a Family Tree to edit data." +msgstr "Avaa sukupuu muokataksesi tietoja." + #, python-format msgid "Gramplet Data Edit: %s" msgstr "Gramplet-tietojen muokkaus: %s" +msgid "Please open a Family Tree before adding a person." +msgstr "Avaa sukupuu lisätäksesi henkilön." + msgid "Please provide a name." msgstr "Anna nimi." diff --git a/DataEntryGramplet/po/tr-local.po b/DataEntryGramplet/po/tr-local.po index 54498485a..22f2294ef 100644 --- a/DataEntryGramplet/po/tr-local.po +++ b/DataEntryGramplet/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-07-03 03:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.1.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -77,6 +77,9 @@ msgstr "Çocuk olarak ekle" msgid "Copy Active Data" msgstr "Aktif Veriyi Kopyala" +msgid "in" +msgstr "içinde" + msgid "No Family Tree is open." msgstr "Açık bir Aile Ağacı yok." diff --git a/DateCalculator/po/da-local.po b/DateCalculator/po/da-local.po index debe906fd..aadd26774 100644 --- a/DateCalculator/po/da-local.po +++ b/DateCalculator/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-02-25 16:12+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,25 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "Reference Date or Date Range" +msgstr "Referencedato eller datointerval" + +msgid "a valid Gramps date" +msgstr "en gyldig Gramps dato" + +msgid "Date or offset ±y or ±y, m, d" +msgstr "Dato eller forskydning ±y eller ±y, m, d" + +msgid "" +"1. a Date\n" +"2. a positive or negative number, representing years\n" +"3. a positive or negative list of values, representing years, months, days" +msgstr "" +"1. en Dato\n" +"2. et positivt eller negativt tal, der angiver år\n" +"3. en positiv eller negativ liste af værdier, der angiver år, måneder, dage" msgid "Result" msgstr "Resultat" @@ -23,8 +41,20 @@ msgstr "Beregn" msgid "Copy" msgstr "Kopier" +msgid "Error: invalid date for first expression" +msgstr "Fejl: ugyldig dato i det første udtryk" + +msgid "Error: invalid offset for second expression" +msgstr "Fejl: ugyldig afstand for andet udtryk" + msgid "Error: at least one expression must be a date" msgstr "Fejl: Mindst et udtryk skal være en dato" +msgid "Enter an expression in the entries above and click Calculate." +msgstr "Indtast et udtryk i ovenstående poster og klik på Beregn." + msgid "Date Calculator" msgstr "Datoberegner" + +msgid "Perform date math calculations" +msgstr "Udfør beregninger for datoer" diff --git a/DateOfDeathGramplet/DateOfDeathGramplet.gpr.py b/DateOfDeathGramplet/DateOfDeathGramplet.gpr.py new file mode 100644 index 000000000..f088cd8fb --- /dev/null +++ b/DateOfDeathGramplet/DateOfDeathGramplet.gpr.py @@ -0,0 +1,36 @@ +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2026 Javad Razavian +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +register( + GRAMPLET, + id="DateOfDeath", + name=_("Date of Death"), + description=_("a gramplet that displays death dates in sorted order"), + status=STABLE, + version = '1.1.1', + fname="DateOfDeathGramplet.py", + authors = ["Javad Razavian"], + authors_email = ["javadr@gmail.com"], + height=200, + gramplet="DateOfDeathGramplet", + gramps_target_version="6.1", + gramplet_title=_("Date of Death"), + help_url="Addon:DateOfDeathGramplet", +) diff --git a/DateOfDeathGramplet/DateOfDeathGramplet.py b/DateOfDeathGramplet/DateOfDeathGramplet.py new file mode 100644 index 000000000..045bfc0a5 --- /dev/null +++ b/DateOfDeathGramplet/DateOfDeathGramplet.py @@ -0,0 +1,130 @@ +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2026 Javad Razavian +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +from gramps.gen.plug import Gramplet +from gramps.gen.const import GRAMPS_LOCALE as glocale +from gramps.gen.display.name import displayer as name_displayer +from gramps.gen.lib.date import Today, Date, gregorian +import gramps.gen.datehandler +from gramps.gen.plug.menu import EnumeratedListOption +try: + _trans = glocale.get_addon_translator(__file__) +except ValueError: + _trans = glocale.translation +_ = _trans.gettext + + +class DateOfDeathGramplet(Gramplet): + def init(self): + self.set_text(_("No Family Tree loaded.")) + self.sort_mode = 'proximity' + + def build_options(self): + name_sort = _("Sort dates of death by") + self.opt_sort = EnumeratedListOption(name_sort, self.sort_mode) + self.opt_sort.add_item("proximity", _("Proximity to current date")) + self.opt_sort.add_item("month_day", _("Month and day")) + + self.add_option(self.opt_sort) + + def save_options(self): + self.sort_mode = self.opt_sort.get_value() + + def save_update_options(self, obj): + self.save_options() + self.gui.data = [self.sort_mode] + self.update() + + def on_load(self): + if len(self.gui.data) >= 1: + self.sort_mode = self.gui.data[0] + else: + self.sort_mode = 'proximity' + + def db_changed(self): + self.connect(self.dbstate.db, 'person-add', self.update) + self.connect(self.dbstate.db, 'person-delete', self.update) + self.connect(self.dbstate.db, 'person-update', self.update) + + def main(self): + self.set_text(_("Processing...")) + database = self.dbstate.db + self.result = [] + + for person in database.iter_people(): + death_ref = person.get_death_ref() + if not death_ref: + continue + death_event = database.get_event_from_handle(death_ref.ref) + date_of_death = death_event.get_date_object() + if not date_of_death.is_regular(): + continue + + self.__calculate(database, person) + + sort_by = self.opt_sort.get_value() + if sort_by == "proximity": + self.result.sort(key=lambda item: -item[0]) + else: + self.result.sort(key=lambda item: (item[1].get_month(), + item[1].get_day())) + self.clear_text() + + for diff_days, date, person, age in self.result: + name = person.get_primary_name() + displayer = gramps.gen.datehandler.displayer + self.append_text("{}: ".format(displayer.display(date))) + self.link(name_displayer.display_name(name), "Person", + person.handle) + if age: + self.append_text(" ({})\n".format(age)) + else: + self.append_text("\n") + self.append_text("", scroll_to="begin") + + def __calculate(self, database, person): + today = Today() + death_ref = person.get_death_ref() + if not death_ref: + return + death_event = database.get_event_from_handle(death_ref.ref) + date_of_death = death_event.get_date_object() + if not date_of_death.is_regular(): + return + + death_greg = gregorian(date_of_death) + death_this_year = Date(today.get_year(), + death_greg.get_month(), + death_greg.get_day()) + diff = today - death_this_year + diff_days = diff[1] * 30 + diff[2] + + birth_ref = person.get_birth_ref() + age = "" + if birth_ref: + birth = database.get_event_from_handle(birth_ref.ref) + birth_date = birth.get_date_object() + if birth_date.is_regular(): + age = date_of_death - birth_date + + if diff_days <= 0: + self.result.append((diff_days, date_of_death, person, age)) + else: + self.result.append((diff_days - 365, date_of_death, person, age)) diff --git a/DateOfDeathGramplet/po/da-local.po b/DateOfDeathGramplet/po/da-local.po new file mode 100644 index 000000000..28a1cd305 --- /dev/null +++ b/DateOfDeathGramplet/po/da-local.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" +"Last-Translator: Kaj Arne Mikkelsen \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "en gramplet der viser dødsdatoer i sorteret rækkefølge" + +msgid "Sort dates of death by" +msgstr "Sortér dødsdatoer efter" + +msgid "Month and day" +msgstr "Måned og dag" + +msgid "Proximity to current date" +msgstr "Afstand til nuværende dato" diff --git a/DateOfDeathGramplet/po/de-local.po b/DateOfDeathGramplet/po/de-local.po new file mode 100644 index 000000000..ec49abe90 --- /dev/null +++ b/DateOfDeathGramplet/po/de-local.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: de\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" +"Last-Translator: Mirko Leonhäuser \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "Date of Death" +msgstr "Sterbedatum" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "Ein Gramplet, das Sterbedaten in sortierter Reihenfolge anzeigt" + +msgid "Sort dates of death by" +msgstr "Todesdaten sortieren nach" + +msgid "Month and day" +msgstr "Monat und Tag" + +msgid "Proximity to current date" +msgstr "Nähe zum aktuellen Datum" diff --git a/DateOfDeathGramplet/po/fa-local.po b/DateOfDeathGramplet/po/fa-local.po new file mode 100644 index 000000000..a9d5d31f6 --- /dev/null +++ b/DateOfDeathGramplet/po/fa-local.po @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Project-Id-Version: DateOfDeathGramplet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-07-04 12:00+0000\n" +"Last-Translator: Javad Razavian \n" +"Language-Team: Persian \n" +"Language: fa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Weblate 5.13-dev\n" + +msgid "Date of Death" +msgstr "تاریخ فوت" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "نموداری که تاریخ‌های مرگ را به ترتیب مرتب‌شده نمایش می‌دهد" + +msgid "No Family Tree loaded." +msgstr "هیچ شجره‌نامه‌ای بارگذاری نشده است." + +msgid "Sort dates of death by" +msgstr "تاریخ های مرگ را بر اساس مرتب کنید" + +msgid "Month and day" +msgstr "ماه و روز" + +msgid "Proximity to current date" +msgstr "نزدیکی به تاریخ فعلی" + +msgid "Processing..." +msgstr "در حال پردازش..." + +#~ msgid "a gramplet that displays death dates sorted by month and day" +#~ msgstr "یک گرمپلت که تاریخ‌های فوت را مرتب بر اساس ماه و روز نمایش می‌دهد" diff --git a/DateOfDeathGramplet/po/fi-local.po b/DateOfDeathGramplet/po/fi-local.po new file mode 100644 index 000000000..e16c22b18 --- /dev/null +++ b/DateOfDeathGramplet/po/fi-local.po @@ -0,0 +1,19 @@ +msgid "" +msgstr "" +"Project-Id-Version: fi\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" +"Generated-By: pygettext.py 1.4\n" + +msgid "Date of Death" +msgstr "Kuolinpävä" diff --git a/DateOfDeathGramplet/po/fr-local.po b/DateOfDeathGramplet/po/fr-local.po new file mode 100644 index 000000000..421002620 --- /dev/null +++ b/DateOfDeathGramplet/po/fr-local.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: trunk\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-07-01 15:01+0000\n" +"Last-Translator: \"David D.\" \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Weblate 2026.7.dev0\n" + +msgid "Date of Death" +msgstr "Date de décès" diff --git a/DateOfDeathGramplet/po/he-local.po b/DateOfDeathGramplet/po/he-local.po new file mode 100644 index 000000000..f3da89365 --- /dev/null +++ b/DateOfDeathGramplet/po/he-local.po @@ -0,0 +1,31 @@ +msgid "" +msgstr "" +"Project-Id-Version: Gramps 5.2.0 – mediamerge\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" +"Last-Translator: Avi Markovitz \n" +"Language-Team: Hebrew \n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " +"n % 10 == 0) ? 2 : 3));\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "Date of Death" +msgstr "תאריך מתוך פטירה" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "גרמפלט שמציג תאריכי־פטירה ממוינים עלפי סדר" + +msgid "Sort dates of death by" +msgstr "מיון תאריכי־פטירה לפי" + +msgid "Month and day" +msgstr "חודש ויום" + +msgid "Proximity to current date" +msgstr "סמיכות לתריך נוכחי" diff --git a/WordleGramplet/po/hr-local.po b/DateOfDeathGramplet/po/hr-local.po similarity index 50% rename from WordleGramplet/po/hr-local.po rename to DateOfDeathGramplet/po/hr-local.po index 5577ef922..b52fdec97 100644 --- a/WordleGramplet/po/hr-local.po +++ b/DateOfDeathGramplet/po/hr-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Gramps 5.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-03-02 14:58+0000\n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-05-17 15:49+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" @@ -13,19 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.10.3-dev\n" +"X-Generator: Weblate 2026.6.dev0\n" -msgid "[Missing]" -msgstr "[Nedostaje]" - -msgid "Number of font sizes" -msgstr "Broj veličina fonta" - -msgid "Select filter to restrict list" -msgstr "Odaberi filtar za ograničavanje popisa" - -msgid "Wordle" -msgstr "Wordle" - -msgid "Gramplet used to make word clouds with wordle.net" -msgstr "Gramplet za izradu oblaka s riječima pomoću wordle.net" +msgid "Date of Death" +msgstr "Datum smrti" diff --git a/DateOfDeathGramplet/po/it-local.po b/DateOfDeathGramplet/po/it-local.po new file mode 100644 index 000000000..c2033bf49 --- /dev/null +++ b/DateOfDeathGramplet/po/it-local.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Project-Id-Version: gramps 3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-07-31 16:24+0000\n" +"Last-Translator: medardo \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" + +msgid "Date of Death" +msgstr "Data di morte" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "Un gramplet che visualizza le date di decesso in ordine cronologico" + +msgid "Month and day" +msgstr "Mese e giorno" diff --git a/WordleGramplet/po/lt-local.po b/DateOfDeathGramplet/po/lt-local.po similarity index 59% rename from WordleGramplet/po/lt-local.po rename to DateOfDeathGramplet/po/lt-local.po index 54f4c266b..1780443b1 100644 --- a/WordleGramplet/po/lt-local.po +++ b/DateOfDeathGramplet/po/lt-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: lt\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-16 15:10-0800\n" -"PO-Revision-Date: 2025-09-14 11:02+0000\n" -"Last-Translator: Tadas Masiulionis \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-01-04 20:01+0000\n" +"Last-Translator: openSUSE Lietuviškai \n" "Language-Team: Lithuanian \n" "Language: lt\n" @@ -13,13 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.14-dev\n" +"X-Generator: Weblate 5.15.1\n" "Generated-By: pygettext.py 1.4\n" "X-Poedit-Language: Lithuanian\n" "X-Poedit-Country: LITHUANIA\n" -msgid "Number of font sizes" -msgstr "Šrifto dydžių skaičius" - -msgid "Select filter to restrict list" -msgstr "Pasirinkite filtrą, kad apribotumėte sąrašą" +msgid "Date of Death" +msgstr "Mirimo data" diff --git a/DateOfDeathGramplet/po/nl-local.po b/DateOfDeathGramplet/po/nl-local.po new file mode 100644 index 000000000..e749f88b9 --- /dev/null +++ b/DateOfDeathGramplet/po/nl-local.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: MediaMerge 5.x\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-08-03 04:01+0000\n" +"Last-Translator: Stephan Paternotte \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" + +msgid "Date of Death" +msgstr "Overlijdensdatum" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "een gramplet die overlijdensdata in gesorteerde volgorde weergeeft" + +msgid "Sort dates of death by" +msgstr "Overlijdensdata sorteren op" + +msgid "Month and day" +msgstr "Maand en dag" + +msgid "Proximity to current date" +msgstr "Nabijheid tot huidige datum" diff --git a/DateOfDeathGramplet/po/pl-local.po b/DateOfDeathGramplet/po/pl-local.po new file mode 100644 index 000000000..f205ae687 --- /dev/null +++ b/DateOfDeathGramplet/po/pl-local.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Project-Id-Version: GRAMPS 3.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2025-12-14 21:00+0000\n" +"Last-Translator: WaldiS \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Weblate 5.15-dev\n" +"X-Poedit-Language: Polish\n" +"X-Poedit-Country: POLAND\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: ~/.poedit/a\n" + +msgid "Date of Death" +msgstr "Date of Śmierci" diff --git a/DateOfDeathGramplet/po/pt_PT-local.po b/DateOfDeathGramplet/po/pt_PT-local.po new file mode 100644 index 000000000..3bfddf183 --- /dev/null +++ b/DateOfDeathGramplet/po/pt_PT-local.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: gramps51\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-08-03 04:01+0000\n" +"Last-Translator: Pedro Albuquerque \n" +"Language-Team: Portuguese (Portugal) \n" +"Language: pt_PT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" + +msgid "Date of Death" +msgstr "Data de óbito" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "um gramplet que mostra os óbitos ordenados" + +msgid "Sort dates of death by" +msgstr "Ordenar óbitos por" + +msgid "Month and day" +msgstr "Mês e dia" + +msgid "Proximity to current date" +msgstr "Proximidade à data actual" diff --git a/DateOfDeathGramplet/po/sk-local.po b/DateOfDeathGramplet/po/sk-local.po new file mode 100644 index 000000000..9df42ef93 --- /dev/null +++ b/DateOfDeathGramplet/po/sk-local.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: GRAMPS 3.1.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-08-05 18:02+0000\n" +"Last-Translator: Milan \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "Date of Death" +msgstr "Dátum úmrtia" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "Gramplet, ktorý zobrazuje dátumy úmrtia v zoradenom poradí" + +msgid "Sort dates of death by" +msgstr "Zoradiť dátumy úmrtia podľa" + +msgid "Month and day" +msgstr "Mesiac a deň" + +msgid "Proximity to current date" +msgstr "Blízkosť k aktuálnemu dátumu" diff --git a/DateOfDeathGramplet/po/sv-local.po b/DateOfDeathGramplet/po/sv-local.po new file mode 100644 index 000000000..2d8145904 --- /dev/null +++ b/DateOfDeathGramplet/po/sv-local.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-08-03 04:02+0000\n" +"Last-Translator: Pär Ekholm \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2026.8.dev0\n" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "en gramplet som visar dödsdatum i sorterad ordning" + +msgid "Sort dates of death by" +msgstr "Sortera dödsdatum efter" + +msgid "Month and day" +msgstr "Månad och dag" + +msgid "Proximity to current date" +msgstr "Närhet till aktuellt datum" diff --git a/DateOfDeathGramplet/po/template.pot b/DateOfDeathGramplet/po/template.pot new file mode 100644 index 000000000..e744022d7 --- /dev/null +++ b/DateOfDeathGramplet/po/template.pot @@ -0,0 +1,39 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Date of Death" +msgstr "" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "" + +msgid "No Family Tree loaded." +msgstr "" + +msgid "Sort dates of death by" +msgstr "" + +msgid "Month and day" +msgstr "" + +msgid "Proximity to current date" +msgstr "" + +msgid "Processing..." +msgstr "" diff --git a/DateOfDeathGramplet/po/tr-local.po b/DateOfDeathGramplet/po/tr-local.po new file mode 100644 index 000000000..a5725f182 --- /dev/null +++ b/DateOfDeathGramplet/po/tr-local.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: 4.1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" +"Last-Translator: Osman Öz \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2026.8.dev0\n" +"Generated-By: pygettext.py 1.4\n" +"X-Language: tr\n" +"X-Source-Language: C\n" + +msgid "Date of Death" +msgstr "Ölüm Tarihi" + +msgid "a gramplet that displays death dates in sorted order" +msgstr "Ölüm tarihlerini sıralı düzende gösteren bir gramplet" + +msgid "Sort dates of death by" +msgstr "Ölüm tarihlerine göre sırala" + +msgid "Month and day" +msgstr "Ay ve gün" + +msgid "Proximity to current date" +msgstr "Geçerli tarihe yakınlık" diff --git a/DateOfDeathGramplet/po/uk-local.po b/DateOfDeathGramplet/po/uk-local.po new file mode 100644 index 000000000..be394324f --- /dev/null +++ b/DateOfDeathGramplet/po/uk-local.po @@ -0,0 +1,19 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-04 00:00-0000\n" +"PO-Revision-Date: 2025-11-17 06:51+0000\n" +"Last-Translator: Fedir Zinchuk \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Weblate 5.15-dev\n" + +msgid "Date of Death" +msgstr "Дата смерті" diff --git a/DeepConnectionsGramplet/po/da-local.po b/DeepConnectionsGramplet/po/da-local.po index 9ab63065c..e2e2c2aec 100644 --- a/DeepConnectionsGramplet/po/da-local.po +++ b/DeepConnectionsGramplet/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:04-0700\n" -"PO-Revision-Date: 2026-04-28 18:11+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "Deep Connections Gramplet" msgstr "Dybe forbindelser Gramplet" @@ -23,6 +23,41 @@ msgstr "Gramplet der viser et dybt slægtskab mellem aktiv og hovedpersoner" msgid "Deep Connections" msgstr "Dybe Slægtskaber" +msgid "⏸ Pause" +msgstr "⏸ Pause" + +msgid "Pause the current search" +msgstr "Sæt den nuværende søgning på pause" + +msgid "▶ Continue" +msgstr "▶ Fortsæt" + +msgid "Continue searching for more relations" +msgstr "Tryk Fortsæt for at søge efter flere slægtskaber" + +msgid "📋 Copy" +msgstr "📋 Kopiér" + +msgid "Copy selected people to clipboard" +msgstr "Kopiér valgte personer til udklipsholderen" + +msgid "🗑 Clear" +msgstr "🗑 Nulstil" + +msgid "Clear all results and reset" +msgstr "Fjern alle resultater og nulstil" + +msgid "Ready to search" +msgstr "Klar til at søge" + +#, python-brace-format +msgid "" +"Search Depth: {depth} | People Processed: {processed} | Queue Size: " +"{queue_size}" +msgstr "" +"Søgedybde: {depth} | Personer behandlet: {processed} | Køstørrelse: " +"{queue_size}" + msgid "mentioned in note" msgstr "Nævnt i note" @@ -50,9 +85,18 @@ msgstr "" "\n" " %s af " +msgid "Error: No Home Person set" +msgstr "Fejl: Ingen proband valgt." + msgid "No Active Person set." msgstr "Ingen aktive person valgt." +msgid "Error: No Active Person set" +msgstr "Fejl: Ingen aktiv person valgt" + +msgid "Initializing search..." +msgstr "Initialiserer søgning..." + msgid "Looking for relationship between\n" msgstr "Leder for slægtsskab mellem\n" @@ -64,6 +108,9 @@ msgstr " %s (Probanden) og\n" msgid " %s (Active Person)...\n" msgstr " %s (Active Person)...\n" +msgid "Searching for connections..." +msgstr "Leder efter forbindelser..." + #, python-format msgid "" "Found relation #%d: \n" @@ -76,3 +123,26 @@ msgid "" msgstr "" "Pauset.\n" "Tryk Fortsæt for at søge efter flere slægtskaber.\n" + +msgid "Paused - Press Continue to search for more relations" +msgstr "Pauset - Tryk Fortsæt for at søge efter flere slægtskaber" + +#, python-format +msgid "" +"\n" +"Search completed. %d relation paths found." +msgstr "" +"\n" +"Søgning afsluttet. %d slægtskabslinjer fundet." + +msgid "Search completed - {} relation paths found" +msgstr "Søgning afsluttet - {} slægtskabslinjer fundet" + +msgid "Error during search: {}" +msgstr "Fejl ved søgning: {}" + +msgid "Resuming search..." +msgstr "Genoptager søgning…" + +msgid "Search interrupted by user" +msgstr "Søgning afbrudt af bruger" diff --git a/DeepConnectionsGramplet/po/es-local.po b/DeepConnectionsGramplet/po/es-local.po index a2b83148d..487dcc47a 100644 --- a/DeepConnectionsGramplet/po/es-local.po +++ b/DeepConnectionsGramplet/po/es-local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: GRAMPS 3.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-06-27 05:51+0000\n" -"Last-Translator: Libre <6n0n1m0s@proton.me>\n" +"PO-Revision-Date: 2026-07-24 05:14+0000\n" +"Last-Translator: Juan Saavedra \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2026.7.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" msgid "Deep Connections Gramplet" msgstr "Conexiones profundas de Gramplet" @@ -23,6 +23,41 @@ msgstr "Gramplet mostrando una relación profunda entre activo y gente inicial" msgid "Deep Connections" msgstr "Conexiones Profundas" +msgid "⏸ Pause" +msgstr "⏸ Pausa" + +msgid "Pause the current search" +msgstr "Pausa la búsqueda en curso" + +msgid "▶ Continue" +msgstr "▶ Continuar" + +msgid "Continue searching for more relations" +msgstr "Continúe buscando más relaciones" + +msgid "📋 Copy" +msgstr "📋 Copiar" + +msgid "Copy selected people to clipboard" +msgstr "Copiar las personas seleccionadas al portapapeles" + +msgid "🗑 Clear" +msgstr "🗑 Limpiar" + +msgid "Clear all results and reset" +msgstr "Limpiar todos los resultados y restablecer" + +msgid "Ready to search" +msgstr "Listo para buscar" + +#, python-brace-format +msgid "" +"Search Depth: {depth} | People Processed: {processed} | Queue Size: " +"{queue_size}" +msgstr "" +"Profundidad de búsqueda: {depth} | Personas procesadas: {processed} | Tamaño " +"de la cola: {queue_size}" + msgid "mentioned in note" msgstr "mencionado en nota" @@ -50,9 +85,18 @@ msgstr "" "\n" " %s de " +msgid "Error: No Home Person set" +msgstr "Error: No se ha definido una Persona Inicial" + msgid "No Active Person set." msgstr "Ninguna Persona Activa fijada." +msgid "Error: No Active Person set" +msgstr "Error: no se ha definido una Persona Activa" + +msgid "Initializing search..." +msgstr "Iniciando búsqueda..." + msgid "Looking for relationship between\n" msgstr "Buscando relación entre\n" @@ -64,6 +108,9 @@ msgstr " %s (Persona Inicial) y\n" msgid " %s (Active Person)...\n" msgstr " %s (Persona Activa)…\n" +msgid "Searching for connections..." +msgstr "Buscando conexiones..." + #, python-format msgid "" "Found relation #%d: \n" @@ -79,8 +126,25 @@ msgstr "" "Pausado.\n" "Presione Continuar para buscar relaciones adicionales.\n" +msgid "Paused - Press Continue to search for more relations" +msgstr "Pausado - Presione Continuar para buscar más relaciones" + +#, python-format +msgid "" +"\n" +"Search completed. %d relation paths found." +msgstr "" +"\n" +"Búsqueda completada. %d caminos de relación encontrados." + +msgid "Search completed - {} relation paths found" +msgstr "Búsqueda completada - {} caminos de relación encontrados" + msgid "Error during search: {}" msgstr "Error durante la búsqueda: {}" +msgid "Resuming search..." +msgstr "Reanudando búsqueda..." + msgid "Search interrupted by user" msgstr "Búsqueda interrumpida por el usuario" diff --git a/DeepConnectionsGramplet/po/fi-local.po b/DeepConnectionsGramplet/po/fi-local.po index 4f0aa228d..56040ab08 100644 --- a/DeepConnectionsGramplet/po/fi-local.po +++ b/DeepConnectionsGramplet/po/fi-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:04-0700\n" -"PO-Revision-Date: 2026-04-20 04:09+0000\n" -"Last-Translator: Matti Niemelä \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" msgid "Deep Connections Gramplet" @@ -24,6 +24,41 @@ msgstr "Gramplet näyttää aktiivi- ja kotihenkilön väliset suhteet syvemmäl msgid "Deep Connections" msgstr "Syväsuhteet" +msgid "⏸ Pause" +msgstr "⏸ Pysäytä" + +msgid "Pause the current search" +msgstr "Keskeytä nykyinen haku" + +msgid "▶ Continue" +msgstr "▶ Jatka" + +msgid "Continue searching for more relations" +msgstr "Jatka hakua löytääksesi lisää suhteita" + +msgid "📋 Copy" +msgstr "📋 Kopioi" + +msgid "Copy selected people to clipboard" +msgstr "Kopioi valitut henkilöt leikepöydälle" + +msgid "🗑 Clear" +msgstr "🗑 Tyhjennä" + +msgid "Clear all results and reset" +msgstr "Tyhjennä kaikki tulokset ja palauta alkuarvoihin" + +msgid "Ready to search" +msgstr "Valmis etsintään" + +#, python-brace-format +msgid "" +"Search Depth: {depth} | People Processed: {processed} | Queue Size: " +"{queue_size}" +msgstr "" +"Haun syvyys: {depth} | Henkilötä käsitelty: {processed} | Jonon koko: " +"{queue_size}" + msgid "mentioned in note" msgstr "mainitussa huomautuksessa" @@ -51,9 +86,18 @@ msgstr "" "\n" " %s henkilölle " +msgid "Error: No Home Person set" +msgstr "Kotihenkilöä ei ole asetettu." + msgid "No Active Person set." msgstr "Aktiivihenkilöä ei ole asetettu." +msgid "Error: No Active Person set" +msgstr "Virhe: aktiivista henkilöä ei ole asetettu" + +msgid "Initializing search..." +msgstr "Hakua alustetaan..." + msgid "Looking for relationship between\n" msgstr "Etsitään henkilöiden väliset sukulaisuussuhteet\n" @@ -65,6 +109,9 @@ msgstr " %s (kotihenkilö) ja\n" msgid " %s (Active Person)...\n" msgstr " %s (aktiivihenkilö)...\n" +msgid "Searching for connections..." +msgstr "Yhteyksiä etsitään..." + #, python-format msgid "" "Found relation #%d: \n" @@ -79,3 +126,26 @@ msgid "" msgstr "" "Pysäytetty.\n" "Etsi lisää suhteita painamalla Jatka.\n" + +msgid "Paused - Press Continue to search for more relations" +msgstr "Keskeytetty - Paina Jatka etsiäksesi lisää suhteita" + +#, python-format +msgid "" +"\n" +"Search completed. %d relation paths found." +msgstr "" +"\n" +"Haku suoritettu. Löydettiin %d suhdepolkua." + +msgid "Search completed - {} relation paths found" +msgstr "Haku valmis - %d suhdepolkua löytynyt" + +msgid "Error during search: {}" +msgstr "Virhe haun aikana: {}" + +msgid "Resuming search..." +msgstr "Hakua jatketaan..." + +msgid "Search interrupted by user" +msgstr "Käyttäjä keskeytti haun" diff --git a/DenominoViso/po/da-local.po b/DenominoViso/po/da-local.po index 230746df3..5b93a5b8c 100644 --- a/DenominoViso/po/da-local.po +++ b/DenominoViso/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-13 23:06+0000\n" -"PO-Revision-Date: 2026-04-28 18:11+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "No Source" msgstr "Ingen Kilde" @@ -62,6 +62,10 @@ msgstr "beskrivelse" msgid "witnesses" msgstr "vidne" +#, python-brace-format +msgid "Failure writing {target_path}: {message}" +msgstr "Fejl ved skrivning til: {target_path}:{message}" + msgid "No central person selected" msgstr "Ingen hovedperson valgt" diff --git a/DenominoViso/po/he-local.po b/DenominoViso/po/he-local.po index 1c25ebfe3..3229511f0 100644 --- a/DenominoViso/po/he-local.po +++ b/DenominoViso/po/he-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Gramps 5.2.0 – mediamerge\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-06-10 19:07+0000\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Avi Markovitz \n" "Language-Team: Hebrew \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 2026.6\n" +"X-Generator: Weblate 2026.8.1.dev0\n" msgid "No Source" msgstr "אין מקור" @@ -192,7 +192,7 @@ msgid "" msgstr "האם לכלול הערה השייכת לעד (אם event_format מכיל <עד>)" msgid "Whether to include a person's attributes" -msgstr "האם לכלול תכונות אדם" +msgstr "האם לכלול מאפייני אדם" msgid "Include Addresses" msgstr "לכלול כתובות" @@ -252,10 +252,10 @@ msgid "Whether to include references for images" msgstr "האם לכלול אזכורים לתמונות" msgid "Source reference attribute" -msgstr "תכונות אזכורי מקור" +msgstr "מאפייני אזכורי מקור" msgid "Image attribute that should be used as source reference" -msgstr "תכונות תמונה בהן יש להשתמש באזכור מקור" +msgstr "מאפייני תמונה בהם יש להשתמש באזכור מקור" msgid "Style Options" msgstr "אפשרויות סגנון" diff --git a/DenominoViso/po/tr-local.po b/DenominoViso/po/tr-local.po index 2dd133379..15b79abaa 100644 --- a/DenominoViso/po/tr-local.po +++ b/DenominoViso/po/tr-local.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 4.1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-02 12:49-0700\n" -"PO-Revision-Date: 2026-07-03 03:01+0000\n" +"PO-Revision-Date: 2026-07-30 22:02+0000\n" "Last-Translator: Osman Öz \n" "Language-Team: Turkish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.1.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" "X-Language: tr\n" "X-Source-Language: C\n" @@ -96,6 +96,9 @@ msgstr "Grafik türü sınırların dışına çıkıyor" msgid "Search" msgstr "Arama" +msgid "in" +msgstr "içinde" + msgid "DenominoViso Options" msgstr "DenominoViso Seçenekleri" diff --git a/DescendantBooks/po/da-local.po b/DescendantBooks/po/da-local.po index 9c071c5e5..6ffad175b 100644 --- a/DescendantBooks/po/da-local.po +++ b/DescendantBooks/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:05-0700\n" -"PO-Revision-Date: 2026-04-28 18:11+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" #, python-format msgid "sp. see %(reference)s : %(spouse)s" @@ -29,6 +29,14 @@ msgstr "Efterkommerrapport" msgid "Writing %s reports..." msgstr "Skriver %s rapporter..." +#, python-brace-format +msgid "{report_count}. Descendants of {name}" +msgstr "{report_count}. Efterkommere til {name}" + +#, python-brace-format +msgid "{report_count:d}. {name}" +msgstr "{report_count:d}. {name}" + msgid "Select filter to restrict people that appear in the report" msgstr "Vælg filter til afgrænsning af personer der vises i rapporten" @@ -67,10 +75,23 @@ msgstr "Indeks over navne" msgid "Report, Generation, Person, Name" msgstr "Rapport, Generation, Person, Navn" +#, python-brace-format +msgid "See Report : {report}, Generation : {generation}, Person : {person}" +msgstr "Se Rapport : {report}, Generation : {generation}, Person : {person}" + #, python-format msgid "Report appearances for %s" msgstr "Rapport udseende for %s" +#, python-brace-format +msgid "Spouse of: Report: {report}, Generation: {generation}, Person: {person}" +msgstr "" +"Ægtefælle til: Rapport: {report}, Generation: {generation}, Person: {person}" + +#, python-brace-format +msgid "Report: {report}, Generation: {generation}, Person: {person}" +msgstr "Rapport: {report}, Generation: {generation}, Person: {person}" + #, python-format msgid "%(event_name)s of %(name)s " msgstr "%(event_name)s for %(name)s " @@ -103,6 +124,10 @@ msgstr "%(event_name)s:" msgid " %(event_text)s" msgstr " %(event_text)s" +#, python-brace-format +msgid "Ref: {number}. {name}" +msgstr "Ref: {number}. {name}" + #, python-format msgid "%(name_kind)s: %(name)s%(endnotes)s" msgstr "%(name_kind)s: %(name)s%(endnotes)s" diff --git a/DescendantBooks/po/fi-local.po b/DescendantBooks/po/fi-local.po index 368bbe11e..17c873e23 100644 --- a/DescendantBooks/po/fi-local.po +++ b/DescendantBooks/po/fi-local.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-03 15:05-0700\n" -"PO-Revision-Date: 2026-04-20 04:09+0000\n" -"Last-Translator: Matti Niemelä \n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-07-26 17:40+0000\n" +"Last-Translator: Juha Mäkeläinen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1-dev\n" +"X-Generator: Weblate 2026.8.dev0\n" "Generated-By: pygettext.py 1.4\n" #, python-format @@ -69,7 +69,7 @@ msgid "Index of Places" msgstr "Paikkahakemisto" msgid "Index of Dates" -msgstr "Päivämäärähakemisto" +msgstr "Päiväyshakemisto" msgid "Index of Names" msgstr "Nimihakemisto" diff --git a/DescendantSpaceTree/po/da-local.po b/DescendantSpaceTree/po/da-local.po index 8d31204d2..4f1342d15 100644 --- a/DescendantSpaceTree/po/da-local.po +++ b/DescendantSpaceTree/po/da-local.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-02 20:12-0600\n" -"PO-Revision-Date: 2025-02-25 16:12+0000\n" +"POT-Creation-Date: 2026-06-02 12:49-0700\n" +"PO-Revision-Date: 2026-08-05 18:01+0000\n" "Last-Translator: Kaj Arne Mikkelsen \n" "Language-Team: Danish \n" @@ -12,13 +12,203 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2-dev\n" +"X-Generator: Weblate 2026.8.1.dev0\n" + +msgid "Patriarchal Line (Male ancestor)" +msgstr "Patriarkal linje (mandlige ane)" + +msgid "Matriarchal Line (Female ancestor)" +msgstr "Matriarkal linje (kvindelig ane)" + +msgid "Dark theme" +msgstr "Mørkt tema" + +msgid "Light theme" +msgstr "Lyst tema" + +msgid "Continue Descendant Tree" +msgstr "Fortsæt efterkommer træ" + +msgid "Alternate Descendant Tree" +msgstr "Alternativt efterkommer træ" + +msgid "Descendant SpaceTree" +msgstr "SpaceTree for efterkommere" + +msgid "Total descendants" +msgstr "Totalt antal efterkommere" + +msgid "Marriages/Families: