From 3bde3962036adadf7120059d4b49f6bc771fc525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 12:05:27 -0300 Subject: [PATCH 01/17] ci: change our entire ci template --- ...e-validation.yml => bundle-validation.yml} | 42 ++--------------- .github/workflows/flatpak-bundle.yml | 45 +++++++++++++++++-- .github/workflows/i18n-update.yml | 45 +++++++++++++++++++ .../{pr-checks.yml => quality-checks.yml} | 2 +- 4 files changed, 91 insertions(+), 43 deletions(-) rename .github/workflows/{flatpak-bundle-validation.yml => bundle-validation.yml} (64%) create mode 100644 .github/workflows/i18n-update.yml rename .github/workflows/{pr-checks.yml => quality-checks.yml} (96%) diff --git a/.github/workflows/flatpak-bundle-validation.yml b/.github/workflows/bundle-validation.yml similarity index 64% rename from .github/workflows/flatpak-bundle-validation.yml rename to .github/workflows/bundle-validation.yml index 6b29e60..937b328 100644 --- a/.github/workflows/flatpak-bundle-validation.yml +++ b/.github/workflows/bundle-validation.yml @@ -1,4 +1,4 @@ -name: '[build] flatpak validation' +name: '[build] bundle validation' on: workflow_call: @@ -9,6 +9,8 @@ on: paths-ignore: - 'po/**' push: + tags: + - 'v*' branches: - main paths-ignore: @@ -18,39 +20,6 @@ permissions: contents: read jobs: - i18n-update: - name: '[build] update translations' - runs-on: ubuntu-latest - if: github.event_name == 'pull_request' && github.event_name != 'workflow_call' - steps: - - name: Checkout code - uses: actions/checkout@v6 - with: - fetch-depth: 1 - - - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y meson ninja-build gjs - - - name: Setup Project - uses: ./.github/actions/setup-project - with: - setup-node: 'true' - - - name: Update POT files - run: yarn pot-generator - - - name: Commit changes - uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 - with: - commit_message: 'lang: update pot files' - file_pattern: 'po/*.po po/*.pot' - - - name: Clean up credentials - if: always() - run: | - rm -rf ~/.gnupg ~/.gnupg/private-keys-v1.d || true - find ~/.gnupg -delete 2>/dev/null || true - bundle-prod: name: '[build] validate prod bundle' runs-on: ubuntu-latest @@ -116,8 +85,3 @@ jobs: run: | rm -rf ~/.gnupg ~/.gnupg/private-keys-v1.d || true find ~/.gnupg -delete 2>/dev/null || true - - test-and-coverage: - name: '[build] test and coverage' - if: github.event_name != 'workflow_call' - uses: ./.github/workflows/test-coverage.yml diff --git a/.github/workflows/flatpak-bundle.yml b/.github/workflows/flatpak-bundle.yml index 437e6f0..b6924db 100644 --- a/.github/workflows/flatpak-bundle.yml +++ b/.github/workflows/flatpak-bundle.yml @@ -20,7 +20,7 @@ env: jobs: flatpak-validation: - uses: ./.github/workflows/flatpak-bundle-validation.yml + uses: ./.github/workflows/bundle-validation.yml flatpak-bundle: name: '[build] create flatpak bundle' @@ -37,6 +37,13 @@ jobs: with: fetch-depth: 1 + - name: Checkout flatpak keys + uses: actions/checkout@v6 + with: + sparse-checkout: | + flatpak/io.github.andrepg.Doit-latest.pub + sparse-checkout-cone-mode: false + - name: Setup Project uses: ./.github/actions/setup-project @@ -72,16 +79,48 @@ jobs: - name: Generate flatpakref run: | - cat << 'FLATPAKREF' > "${{ env.FLATPAK_NAME }}-latest.flatpakref" + # Import separate public key for distribution (not the signing key) + gpg --batch --yes --import flatpak/io.github.andrepg.Doit-latest.pub + + # Filter by email to get specific key fingerprint + DIST_KEY_FP=$(gpg --list-public-keys --with-colons "andrepg@protonmail.com" 2>/dev/null | grep "^fpr" | cut -d: -f10) + + # Validate fingerprint was extracted + if [ -z "$DIST_KEY_FP" ]; then + echo "ERROR: No key found for andrepg@protonmail.com" + exit 1 + fi + + # Export as BINARY (no --armor!), then base64 encode + GPG_PUB_KEY=$(gpg --export "$DIST_KEY_FP" | base64 -w0) + + # Validate base64 output is not empty + if [ -z "$GPG_PUB_KEY" ]; then + echo "ERROR: Failed to export or encode GPG key" + exit 1 + fi + + # Generate flatpakref with base64-encoded key + cat << FLATPAKREF > "${{ env.FLATPAK_NAME }}-latest.flatpakref" [Flatpak Ref] Title=Do It Name=${{ env.FLATPAK_NAME }} Branch=main Url=https://github.com/${{ github.repository }}/releases/download/${{ env.RELEASE_TAG }}/${{ env.FLATPAK_NAME }}-latest.flatpak IsRuntime=False - GPGKey=${{ secrets.FLATPAK_GPG_KEY }} + GPGKey=$GPG_PUB_KEY FLATPAKREF + - name: Verify flatpakref GPGKey format + run: | + # Use robust grep without anchor for INI file format + GPG_KEY_VAL=$(grep "GPGKey=" "${{ env.FLATPAK_NAME }}-latest.flatpakref" | cut -d= -f2) + if ! echo "$GPG_KEY_VAL" | base64 -d >/dev/null 2>&1; then + echo "ERROR: GPGKey is not valid base64" + exit 1 + fi + echo "Verified: GPGKey is valid base64" + - name: Upload bundle to release uses: softprops/action-gh-release@v2 with: diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml new file mode 100644 index 0000000..da83f70 --- /dev/null +++ b/.github/workflows/i18n-update.yml @@ -0,0 +1,45 @@ +name: '[build] i18n update' + +on: + pull_request: + branches: ['main'] + paths: + - 'src/**' + - 'package.json' + - 'yarn.lock' + +permissions: + contents: write + +jobs: + i18n-update: + name: '[build] update translations' + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + fetch-depth: 1 + + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y meson ninja-build gjs + + - name: Setup Project + uses: ./.github/actions/setup-project + with: + setup-node: 'true' + + - name: Update POT files + run: yarn pot-generator + + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 + with: + commit_message: 'lang: update pot files' + file_pattern: 'po/*.po po/*.pot' + + - name: Clean up credentials + if: always() + run: | + rm -rf ~/.gnupg ~/.gnupg/private-keys-v1.d || true + find ~/.gnupg -delete 2>/dev/null || true diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/quality-checks.yml similarity index 96% rename from .github/workflows/pr-checks.yml rename to .github/workflows/quality-checks.yml index 1d633ff..3dfaec9 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/quality-checks.yml @@ -1,4 +1,4 @@ -name: '[ci] pr checks' +name: '[ci] quality checks' on: pull_request: From 8641bd190fd72803abb117ef172dcb2a2e743b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 12:05:52 -0300 Subject: [PATCH 02/17] lint: ignore opencode folder when linting --- eslint.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.config.ts b/eslint.config.ts index ae9253c..ef1d057 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -13,6 +13,7 @@ export default defineConfig([ '.github/**', '.vscode/**', + '.opencode/**', 'flatpak/**', 'tests/**', From 9949e7249e9d4d2edb3e1a1eb37cc63a0036da73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 12:34:39 -0300 Subject: [PATCH 03/17] ci: restructure pipeline workflows - fix flatpakref GPG error (use base64 binary export) - rename pr-checks to quality-checks - create i18n-update workflow for POT generation - refactor bundle-validation (split jobs, update triggers) - remove unnecessary cleanup step from i18n-update --- .github/workflows/i18n-update.yml | 6 ------ .prettierignore | 1 + .qlty/qlty.toml | 2 +- commitlint.static.ts | 5 ++--- src/platform/gnome/actions/backup.ts | 2 -- src/platform/gnome/views/task-list-store.ts | 4 +--- 6 files changed, 5 insertions(+), 15 deletions(-) diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index da83f70..f2fca31 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -37,9 +37,3 @@ jobs: with: commit_message: 'lang: update pot files' file_pattern: 'po/*.po po/*.pot' - - - name: Clean up credentials - if: always() - run: | - rm -rf ~/.gnupg ~/.gnupg/private-keys-v1.d || true - find ~/.gnupg -delete 2>/dev/null || true diff --git a/.prettierignore b/.prettierignore index ed4eb15..614a4c4 100644 --- a/.prettierignore +++ b/.prettierignore @@ -6,3 +6,4 @@ _build_pot flatpak/generated-sources.json package-lock.json **.code-workspace +build diff --git a/.qlty/qlty.toml b/.qlty/qlty.toml index 394709e..17a1bfb 100644 --- a/.qlty/qlty.toml +++ b/.qlty/qlty.toml @@ -45,7 +45,7 @@ exclude_patterns = [ "**/.flatpak-builder/**", "flatpak/generated-sources.json", ".github/workflows/version-bump.yml", - ".github/workflows/pr-checks.yml", + ".github/workflows/quality-checks.yml", ] test_patterns = [ diff --git a/commitlint.static.ts b/commitlint.static.ts index c1fd7ae..3f59537 100644 --- a/commitlint.static.ts +++ b/commitlint.static.ts @@ -29,7 +29,7 @@ export const AllowedPrefixes = [ * @see https://commitlint.js.org/reference/configuration#rules */ export enum RuleConfigExecution { - always = 'always' + always = 'always', } /** @@ -38,6 +38,5 @@ export enum RuleConfigExecution { */ export enum RuleConfigName { typeEnum = 'type-enum', - headerCase = 'header-case' + headerCase = 'header-case', } - diff --git a/src/platform/gnome/actions/backup.ts b/src/platform/gnome/actions/backup.ts index a5e4b5c..e3db793 100644 --- a/src/platform/gnome/actions/backup.ts +++ b/src/platform/gnome/actions/backup.ts @@ -64,7 +64,6 @@ const backup = () => { * Handles the export process by opening a file dialog and saving the DB contents. */ const exportJson = (parent: Adw.ApplicationWindow) => { - const dialog = createFileChooser(AppLocale.app.backup.export); dialog.save(parent, null, (dialog, result) => { @@ -88,7 +87,6 @@ const backup = () => { * Handles the import process by opening an existing JSON file and overriding the DB. */ const importJson = (parent: Adw.ApplicationWindow) => { - const dialog = createFileChooser(AppLocale.app.backup.import); dialog.open(parent, null, (dialog, result) => { diff --git a/src/platform/gnome/views/task-list-store.ts b/src/platform/gnome/views/task-list-store.ts index d3f3cb0..5742c27 100644 --- a/src/platform/gnome/views/task-list-store.ts +++ b/src/platform/gnome/views/task-list-store.ts @@ -202,9 +202,7 @@ export class TaskListStore extends Gio.ListStore { async load() { log(TaskListStore.$gtype.name, 'Loading tasks from database'); - (await this.persistence.load()).forEach( - (item) => this.append_task(item) - ); + (await this.persistence.load()).forEach((item) => this.append_task(item)); log(TaskListStore.$gtype.name, `Loaded ${this.get_count()} tasks from database`); } From 794cb4da1fcf81ca4476e96f487706068814a9bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 12:41:54 -0300 Subject: [PATCH 04/17] ci: install meson 1.4.0 via pip in i18n-update --- .github/workflows/i18n-update.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index f2fca31..b9264cb 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -22,7 +22,10 @@ jobs: fetch-depth: 1 - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y meson ninja-build gjs + run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip + + - name: Install Meson + run: pip3 install --break-system-packages meson==1.4.0 - name: Setup Project uses: ./.github/actions/setup-project From f116708c627cb0972dc5393c0669e9cd57ae34b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 12:44:11 -0300 Subject: [PATCH 05/17] ci: add meson build deps (desktop-file-utils, libappstream4, etc) --- .github/workflows/i18n-update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index b9264cb..93ce394 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -22,7 +22,7 @@ jobs: fetch-depth: 1 - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip + run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils libappstream4 libglib2.0-dev libgjs0 - name: Install Meson run: pip3 install --break-system-packages meson==1.4.0 From e7086f8d4ac6596d9217db8a958d1bf5618ae908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 12:46:34 -0300 Subject: [PATCH 06/17] ci: fix apt package names (appstream, libgjs0g) --- .github/workflows/i18n-update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index 93ce394..48a1642 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -22,7 +22,7 @@ jobs: fetch-depth: 1 - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils libappstream4 libglib2.0-dev libgjs0 + run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils appstream libglib2.0-dev libgjs0g - name: Install Meson run: pip3 install --break-system-packages meson==1.4.0 From de4735824caebad22c909b546bbc768e644c2e1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 12:53:35 -0300 Subject: [PATCH 07/17] ci: add gettext for msgfmt --- .github/workflows/i18n-update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index 48a1642..1b4b6e3 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -22,7 +22,7 @@ jobs: fetch-depth: 1 - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils appstream libglib2.0-dev libgjs0g + run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils appstream libglib2.0-dev libgjs0g gettext - name: Install Meson run: pip3 install --break-system-packages meson==1.4.0 From 0edd701554bd35db5e88f011f79e770403be19e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 13:09:29 -0300 Subject: [PATCH 08/17] ci: add build cleanup step before meson --- .github/workflows/i18n-update.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index 1b4b6e3..f9f7816 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -24,6 +24,9 @@ jobs: - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils appstream libglib2.0-dev libgjs0g gettext + - name: Clean up stale build directories + run: rm -rf _build _build_pot + - name: Install Meson run: pip3 install --break-system-packages meson==1.4.0 From b14c3eb1742ad3c1d497460d908a24855a3d7a3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 13:16:39 -0300 Subject: [PATCH 09/17] ci: add build to gitignore, remove build cleanup from i18n-update --- .github/workflows/i18n-update.yml | 3 --- .gitignore | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index f9f7816..1b4b6e3 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -24,9 +24,6 @@ jobs: - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils appstream libglib2.0-dev libgjs0g gettext - - name: Clean up stale build directories - run: rm -rf _build _build_pot - - name: Install Meson run: pip3 install --break-system-packages meson==1.4.0 diff --git a/.gitignore b/.gitignore index 3688f40..fb642d7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ repo/ **/_build +**/build **/_build-*/** **/_repo-*/** **/*.json~ From f38303ab364295148a16cfc4b651b7aee97d2750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 13:22:48 -0300 Subject: [PATCH 10/17] lang: update pot reference --- po/POTFILES.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index d6f1f37..19e38e8 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -12,7 +12,6 @@ src/app.wrapper.ts src/app.entrypoint.ts # Core files -src/core/persistence/gio-persistence.ts src/core/interfaces/task-view.ts src/core/interfaces/settings.ts src/core/interfaces/persistence.ts @@ -33,6 +32,7 @@ src/platform/gnome/actions/toast.ts src/platform/gnome/actions/quit.ts src/platform/gnome/actions/backup.ts src/platform/gnome/actions/about.ts +src/platform/gnome/persistence/gio-persistence.ts # Platform/GNOME - Views src/platform/gnome/views/doit.ts From cdc67c4445b8d2651435cec52c835a7609cc3c5c Mon Sep 17 00:00:00 2001 From: andrepg <12430295+andrepg@users.noreply.github.com> Date: Mon, 13 Apr 2026 16:23:34 +0000 Subject: [PATCH 11/17] lang: update pot files --- po/es.po | 283 +++++++++++++++------------------ po/io.github.andrepg.Doit.pot | 158 +------------------ po/pt_BR.po | 285 +++++++++++++++------------------- 3 files changed, 254 insertions(+), 472 deletions(-) diff --git a/po/es.po b/po/es.po index 86fc4b8..391741a 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-12 08:48-0300\n" +"POT-Creation-Date: 2026-04-13 16:23+0000\n" "PO-Revision-Date: 2026-04-07 21:05-0300\n" "Last-Translator: André Paul Grandsire \n" "Language-Team: Spanish\n" @@ -15,162 +15,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/app.strings.ts:26 -msgctxt "sorting" -msgid "Older to newer" -msgstr "Más antiguas primero" - -#: src/app.strings.ts:27 -msgctxt "sorting" -msgid "To do first" -msgstr "Pendientes primero" - -#: src/app.strings.ts:28 src/app.strings.ts:29 -msgctxt "sorting" -msgid "A to Z" -msgstr "A a Z" - -#: src/app.strings.ts:32 -msgctxt "sorting" -msgid "Newer to older" -msgstr "Más recientes primero" - -#: src/app.strings.ts:33 -msgctxt "sorting" -msgid "Done first" -msgstr "Completadas primero" - -#: src/app.strings.ts:34 src/app.strings.ts:35 -msgctxt "sorting" -msgid "Z to A" -msgstr "Z a A" - -#: src/app.strings.ts:39 -msgctxt "sorting-field" -msgid "Date" -msgstr "Fecha" - -#: src/app.strings.ts:40 -msgctxt "sorting-field" -msgid "Status" -msgstr "Estado" - -#: src/app.strings.ts:41 -msgctxt "sorting-field" -msgid "Title" -msgstr "Título" - -#: src/app.strings.ts:42 -msgctxt "sorting-field" -msgid "Project" -msgstr "Proyecto" - -#: src/app.strings.ts:48 -msgctxt "task-list" -msgid "Tasks" -msgstr "Tareas" - -#: src/app.strings.ts:49 -msgctxt "task-list" -msgid "No tasks found" -msgstr "No hay tareas" - -#: src/app.strings.ts:50 -msgctxt "task-list" -msgid "All tasks" -msgstr "Todas las tareas" - -#: src/app.strings.ts:51 -msgctxt "task-list" -msgid "Without project" -msgstr "Sin proyecto" - -#: src/app.strings.ts:52 -#, javascript-format -msgctxt "task-group" -msgid "%s finished, %s deleted" -msgstr "%s completadas, %s eliminadas" - -#: src/app.strings.ts:56 -msgctxt "task-form" -msgid "Title cannot be empty" -msgstr "El título no puede estar vacío" - -#: src/app.strings.ts:60 -msgctxt "toast" -msgid "Task created" -msgstr "Tarea creada" - -#: src/app.strings.ts:61 -msgctxt "toast" -msgid "Task edited" -msgstr "Tarea editada" - -#: src/app.strings.ts:62 -msgctxt "toast" -msgid "Task updated" -msgstr "Tarea actualizada" - -#: src/app.strings.ts:63 -msgctxt "toast" -msgid "Task restored" -msgstr "Tarea restaurada" - -#: src/app.strings.ts:64 -msgctxt "toast" -msgid "Task deleted" -msgstr "Tarea eliminada" - -#: src/app.strings.ts:65 -msgctxt "toast" -msgid "Tasks purged" -msgstr "Tareas eliminadas" - -#: src/app.strings.ts:66 -msgctxt "toast" -msgid "Task finished" -msgstr "Tarea completada" - -#: src/app.strings.ts:72 -msgctxt "backup" -msgid "Save Tasks As…" -msgstr "Guardar Tareas Como…" - -#: src/app.strings.ts:73 -msgctxt "backup" -msgid "Import Tasks…" -msgstr "Importar Tareas…" - -#: src/app.strings.ts:75 -msgctxt "backup" -msgid "Database exported successfully" -msgstr "Exportación completada con éxito" - -#: src/app.strings.ts:76 -msgctxt "backup" -msgid "Error exporting database" -msgstr "Error al exportar datos" - -#: src/app.strings.ts:78 -msgctxt "backup" -msgid "Database imported successfully" -msgstr "Importación completada con éxito" - -#: src/app.strings.ts:79 -msgctxt "backup" -msgid "Error importing database" -msgstr "Error al importar datos" - -#: src/app.strings.ts:82 -msgctxt "about" -msgid "translators-credits" -msgstr "André Paul Grandsire/andrepg@users.noreply.github.com" - -#: src/app.strings.ts:83 -msgctxt "about" -msgid "Donate" -msgstr "Donar" - #: src/platform/gnome/widgets/application.ui:13 msgid "Purge deleted tasks" msgstr "Eliminar tareas excluídas" @@ -283,6 +127,131 @@ msgstr "Ordenar tareas por" msgid "Order strategy" msgstr "Estrategia de ordenación" +#~ msgctxt "sorting" +#~ msgid "Older to newer" +#~ msgstr "Más antiguas primero" + +#~ msgctxt "sorting" +#~ msgid "To do first" +#~ msgstr "Pendientes primero" + +#~ msgctxt "sorting" +#~ msgid "A to Z" +#~ msgstr "A a Z" + +#~ msgctxt "sorting" +#~ msgid "Newer to older" +#~ msgstr "Más recientes primero" + +#~ msgctxt "sorting" +#~ msgid "Done first" +#~ msgstr "Completadas primero" + +#~ msgctxt "sorting" +#~ msgid "Z to A" +#~ msgstr "Z a A" + +#~ msgctxt "sorting-field" +#~ msgid "Date" +#~ msgstr "Fecha" + +#~ msgctxt "sorting-field" +#~ msgid "Status" +#~ msgstr "Estado" + +#~ msgctxt "sorting-field" +#~ msgid "Title" +#~ msgstr "Título" + +#~ msgctxt "sorting-field" +#~ msgid "Project" +#~ msgstr "Proyecto" + +#~ msgctxt "task-list" +#~ msgid "Tasks" +#~ msgstr "Tareas" + +#~ msgctxt "task-list" +#~ msgid "No tasks found" +#~ msgstr "No hay tareas" + +#~ msgctxt "task-list" +#~ msgid "All tasks" +#~ msgstr "Todas las tareas" + +#~ msgctxt "task-list" +#~ msgid "Without project" +#~ msgstr "Sin proyecto" + +#, javascript-format +#~ msgctxt "task-group" +#~ msgid "%s finished, %s deleted" +#~ msgstr "%s completadas, %s eliminadas" + +#~ msgctxt "task-form" +#~ msgid "Title cannot be empty" +#~ msgstr "El título no puede estar vacío" + +#~ msgctxt "toast" +#~ msgid "Task created" +#~ msgstr "Tarea creada" + +#~ msgctxt "toast" +#~ msgid "Task edited" +#~ msgstr "Tarea editada" + +#~ msgctxt "toast" +#~ msgid "Task updated" +#~ msgstr "Tarea actualizada" + +#~ msgctxt "toast" +#~ msgid "Task restored" +#~ msgstr "Tarea restaurada" + +#~ msgctxt "toast" +#~ msgid "Task deleted" +#~ msgstr "Tarea eliminada" + +#~ msgctxt "toast" +#~ msgid "Tasks purged" +#~ msgstr "Tareas eliminadas" + +#~ msgctxt "toast" +#~ msgid "Task finished" +#~ msgstr "Tarea completada" + +#~ msgctxt "backup" +#~ msgid "Save Tasks As…" +#~ msgstr "Guardar Tareas Como…" + +#~ msgctxt "backup" +#~ msgid "Import Tasks…" +#~ msgstr "Importar Tareas…" + +#~ msgctxt "backup" +#~ msgid "Database exported successfully" +#~ msgstr "Exportación completada con éxito" + +#~ msgctxt "backup" +#~ msgid "Error exporting database" +#~ msgstr "Error al exportar datos" + +#~ msgctxt "backup" +#~ msgid "Database imported successfully" +#~ msgstr "Importación completada con éxito" + +#~ msgctxt "backup" +#~ msgid "Error importing database" +#~ msgstr "Error al importar datos" + +#~ msgctxt "about" +#~ msgid "translators-credits" +#~ msgstr "André Paul Grandsire/andrepg@users.noreply.github.com" + +#~ msgctxt "about" +#~ msgid "Donate" +#~ msgstr "Donar" + #~ msgid "Projects" #~ msgstr "Proyectos" diff --git a/po/io.github.andrepg.Doit.pot b/po/io.github.andrepg.Doit.pot index 2fce6a3..fff6494 100644 --- a/po/io.github.andrepg.Doit.pot +++ b/po/io.github.andrepg.Doit.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-12 08:48-0300\n" +"POT-Creation-Date: 2026-04-13 16:23+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,162 +17,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/app.strings.ts:26 -msgctxt "sorting" -msgid "Older to newer" -msgstr "" - -#: src/app.strings.ts:27 -msgctxt "sorting" -msgid "To do first" -msgstr "" - -#: src/app.strings.ts:28 src/app.strings.ts:29 -msgctxt "sorting" -msgid "A to Z" -msgstr "" - -#: src/app.strings.ts:32 -msgctxt "sorting" -msgid "Newer to older" -msgstr "" - -#: src/app.strings.ts:33 -msgctxt "sorting" -msgid "Done first" -msgstr "" - -#: src/app.strings.ts:34 src/app.strings.ts:35 -msgctxt "sorting" -msgid "Z to A" -msgstr "" - -#: src/app.strings.ts:39 -msgctxt "sorting-field" -msgid "Date" -msgstr "" - -#: src/app.strings.ts:40 -msgctxt "sorting-field" -msgid "Status" -msgstr "" - -#: src/app.strings.ts:41 -msgctxt "sorting-field" -msgid "Title" -msgstr "" - -#: src/app.strings.ts:42 -msgctxt "sorting-field" -msgid "Project" -msgstr "" - -#: src/app.strings.ts:48 -msgctxt "task-list" -msgid "Tasks" -msgstr "" - -#: src/app.strings.ts:49 -msgctxt "task-list" -msgid "No tasks found" -msgstr "" - -#: src/app.strings.ts:50 -msgctxt "task-list" -msgid "All tasks" -msgstr "" - -#: src/app.strings.ts:51 -msgctxt "task-list" -msgid "Without project" -msgstr "" - -#: src/app.strings.ts:52 -#, javascript-format -msgctxt "task-group" -msgid "%s finished, %s deleted" -msgstr "" - -#: src/app.strings.ts:56 -msgctxt "task-form" -msgid "Title cannot be empty" -msgstr "" - -#: src/app.strings.ts:60 -msgctxt "toast" -msgid "Task created" -msgstr "" - -#: src/app.strings.ts:61 -msgctxt "toast" -msgid "Task edited" -msgstr "" - -#: src/app.strings.ts:62 -msgctxt "toast" -msgid "Task updated" -msgstr "" - -#: src/app.strings.ts:63 -msgctxt "toast" -msgid "Task restored" -msgstr "" - -#: src/app.strings.ts:64 -msgctxt "toast" -msgid "Task deleted" -msgstr "" - -#: src/app.strings.ts:65 -msgctxt "toast" -msgid "Tasks purged" -msgstr "" - -#: src/app.strings.ts:66 -msgctxt "toast" -msgid "Task finished" -msgstr "" - -#: src/app.strings.ts:72 -msgctxt "backup" -msgid "Save Tasks As…" -msgstr "" - -#: src/app.strings.ts:73 -msgctxt "backup" -msgid "Import Tasks…" -msgstr "" - -#: src/app.strings.ts:75 -msgctxt "backup" -msgid "Database exported successfully" -msgstr "" - -#: src/app.strings.ts:76 -msgctxt "backup" -msgid "Error exporting database" -msgstr "" - -#: src/app.strings.ts:78 -msgctxt "backup" -msgid "Database imported successfully" -msgstr "" - -#: src/app.strings.ts:79 -msgctxt "backup" -msgid "Error importing database" -msgstr "" - -#: src/app.strings.ts:82 -msgctxt "about" -msgid "translators-credits" -msgstr "" - -#: src/app.strings.ts:83 -msgctxt "about" -msgid "Donate" -msgstr "" - #: src/platform/gnome/widgets/application.ui:13 msgid "Purge deleted tasks" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index 7cce06c..3a390cf 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-12 08:48-0300\n" +"POT-Creation-Date: 2026-04-13 16:23+0000\n" "PO-Revision-Date: 2026-04-07 21:15-0300\n" "Last-Translator: André Paul Grandsire \n" "Language-Team: Portuguese \n" @@ -20,163 +20,6 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 50.0\n" -#: src/app.strings.ts:26 -msgctxt "sorting" -msgid "Older to newer" -msgstr "Mais antigas primeiro" - -#: src/app.strings.ts:27 -msgctxt "sorting" -msgid "To do first" -msgstr "Pendentes primeiro" - -#: src/app.strings.ts:28 src/app.strings.ts:29 -msgctxt "sorting" -msgid "A to Z" -msgstr "A a Z" - -#: src/app.strings.ts:32 -msgctxt "sorting" -msgid "Newer to older" -msgstr "Mais novas primeiro" - -#: src/app.strings.ts:33 -msgctxt "sorting" -msgid "Done first" -msgstr "Concluídas primeiro" - -#: src/app.strings.ts:34 src/app.strings.ts:35 -msgctxt "sorting" -msgid "Z to A" -msgstr "Z a A" - -#: src/app.strings.ts:39 -msgctxt "sorting-field" -msgid "Date" -msgstr "Data" - -#: src/app.strings.ts:40 -msgctxt "sorting-field" -msgid "Status" -msgstr "Status" - -# I think that this string can be merged with the previous one (from src/platform/gnome/widgets/task-form.ui:20). -#: src/app.strings.ts:41 -msgctxt "sorting-field" -msgid "Title" -msgstr "Título" - -#: src/app.strings.ts:42 -msgctxt "sorting-field" -msgid "Project" -msgstr "Projeto" - -#: src/app.strings.ts:48 -msgctxt "task-list" -msgid "Tasks" -msgstr "Tarefas" - -#: src/app.strings.ts:49 -msgctxt "task-list" -msgid "No tasks found" -msgstr "Nenhuma tarefa encontrada" - -#: src/app.strings.ts:50 -msgctxt "task-list" -msgid "All tasks" -msgstr "Suas tarefas" - -#: src/app.strings.ts:51 -msgctxt "task-list" -msgid "Without project" -msgstr "Sem projeto" - -#: src/app.strings.ts:52 -#, javascript-format -msgctxt "task-group" -msgid "%s finished, %s deleted" -msgstr "%s concluídas, %s excluídas" - -#: src/app.strings.ts:56 -msgctxt "task-form" -msgid "Title cannot be empty" -msgstr "Título não pode ser vazio" - -#: src/app.strings.ts:60 -msgctxt "toast" -msgid "Task created" -msgstr "Tarefa criada" - -#: src/app.strings.ts:61 -msgctxt "toast" -msgid "Task edited" -msgstr "Tarefa modificada" - -#: src/app.strings.ts:62 -msgctxt "toast" -msgid "Task updated" -msgstr "Tarefa atualizada" - -#: src/app.strings.ts:63 -msgctxt "toast" -msgid "Task restored" -msgstr "Tarefa restaurada" - -#: src/app.strings.ts:64 -msgctxt "toast" -msgid "Task deleted" -msgstr "Tarefa excluída" - -#: src/app.strings.ts:65 -msgctxt "toast" -msgid "Tasks purged" -msgstr "Tarefas excluídas descartadas" - -#: src/app.strings.ts:66 -msgctxt "toast" -msgid "Task finished" -msgstr "Tarefa finalizada" - -#: src/app.strings.ts:72 -msgctxt "backup" -msgid "Save Tasks As…" -msgstr "Salvar Tarefas Como…" - -#: src/app.strings.ts:73 -msgctxt "backup" -msgid "Import Tasks…" -msgstr "Importar Tarefas…" - -#: src/app.strings.ts:75 -msgctxt "backup" -msgid "Database exported successfully" -msgstr "Exportação concluída com sucesso." - -#: src/app.strings.ts:76 -msgctxt "backup" -msgid "Error exporting database" -msgstr "Erro ao exportar dados" - -#: src/app.strings.ts:78 -msgctxt "backup" -msgid "Database imported successfully" -msgstr "Banco de dados importado com sucesso" - -#: src/app.strings.ts:79 -msgctxt "backup" -msgid "Error importing database" -msgstr "Erro ao importar dados" - -#: src/app.strings.ts:82 -msgctxt "about" -msgid "translators-credits" -msgstr "André Paul Grandsire/andrepg@users.noreply.github.com" - -#: src/app.strings.ts:83 -msgctxt "about" -msgid "Donate" -msgstr "Fazer uma doação" - #: src/platform/gnome/widgets/application.ui:13 msgid "Purge deleted tasks" msgstr "Descartar tarefas excluídas" @@ -290,6 +133,132 @@ msgstr "Ordenar tarefas por" msgid "Order strategy" msgstr "Estratégia de ordenação" +#~ msgctxt "sorting" +#~ msgid "Older to newer" +#~ msgstr "Mais antigas primeiro" + +#~ msgctxt "sorting" +#~ msgid "To do first" +#~ msgstr "Pendentes primeiro" + +#~ msgctxt "sorting" +#~ msgid "A to Z" +#~ msgstr "A a Z" + +#~ msgctxt "sorting" +#~ msgid "Newer to older" +#~ msgstr "Mais novas primeiro" + +#~ msgctxt "sorting" +#~ msgid "Done first" +#~ msgstr "Concluídas primeiro" + +#~ msgctxt "sorting" +#~ msgid "Z to A" +#~ msgstr "Z a A" + +#~ msgctxt "sorting-field" +#~ msgid "Date" +#~ msgstr "Data" + +#~ msgctxt "sorting-field" +#~ msgid "Status" +#~ msgstr "Status" + +# I think that this string can be merged with the previous one (from src/platform/gnome/widgets/task-form.ui:20). +#~ msgctxt "sorting-field" +#~ msgid "Title" +#~ msgstr "Título" + +#~ msgctxt "sorting-field" +#~ msgid "Project" +#~ msgstr "Projeto" + +#~ msgctxt "task-list" +#~ msgid "Tasks" +#~ msgstr "Tarefas" + +#~ msgctxt "task-list" +#~ msgid "No tasks found" +#~ msgstr "Nenhuma tarefa encontrada" + +#~ msgctxt "task-list" +#~ msgid "All tasks" +#~ msgstr "Suas tarefas" + +#~ msgctxt "task-list" +#~ msgid "Without project" +#~ msgstr "Sem projeto" + +#, javascript-format +#~ msgctxt "task-group" +#~ msgid "%s finished, %s deleted" +#~ msgstr "%s concluídas, %s excluídas" + +#~ msgctxt "task-form" +#~ msgid "Title cannot be empty" +#~ msgstr "Título não pode ser vazio" + +#~ msgctxt "toast" +#~ msgid "Task created" +#~ msgstr "Tarefa criada" + +#~ msgctxt "toast" +#~ msgid "Task edited" +#~ msgstr "Tarefa modificada" + +#~ msgctxt "toast" +#~ msgid "Task updated" +#~ msgstr "Tarefa atualizada" + +#~ msgctxt "toast" +#~ msgid "Task restored" +#~ msgstr "Tarefa restaurada" + +#~ msgctxt "toast" +#~ msgid "Task deleted" +#~ msgstr "Tarefa excluída" + +#~ msgctxt "toast" +#~ msgid "Tasks purged" +#~ msgstr "Tarefas excluídas descartadas" + +#~ msgctxt "toast" +#~ msgid "Task finished" +#~ msgstr "Tarefa finalizada" + +#~ msgctxt "backup" +#~ msgid "Save Tasks As…" +#~ msgstr "Salvar Tarefas Como…" + +#~ msgctxt "backup" +#~ msgid "Import Tasks…" +#~ msgstr "Importar Tarefas…" + +#~ msgctxt "backup" +#~ msgid "Database exported successfully" +#~ msgstr "Exportação concluída com sucesso." + +#~ msgctxt "backup" +#~ msgid "Error exporting database" +#~ msgstr "Erro ao exportar dados" + +#~ msgctxt "backup" +#~ msgid "Database imported successfully" +#~ msgstr "Banco de dados importado com sucesso" + +#~ msgctxt "backup" +#~ msgid "Error importing database" +#~ msgstr "Erro ao importar dados" + +#~ msgctxt "about" +#~ msgid "translators-credits" +#~ msgstr "André Paul Grandsire/andrepg@users.noreply.github.com" + +#~ msgctxt "about" +#~ msgid "Donate" +#~ msgstr "Fazer uma doação" + #~ msgid "Projects" #~ msgstr "Projetos" From 78ac145432e445b25ba02b3cf7e014d951ae1c22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 13:36:15 -0300 Subject: [PATCH 12/17] ci: create new branch and pr for i18n updates --- .github/workflows/i18n-update.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index 1b4b6e3..3e45654 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -35,8 +35,23 @@ jobs: - name: Update POT files run: yarn pot-generator + - name: Create new branch for translations + run: | + git checkout -b "i18n-update/$(git rev-parse --short HEAD)" + - name: Commit changes uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 with: commit_message: 'lang: update pot files' file_pattern: 'po/*.po po/*.pot' + + - name: Create PR + if: github.event_name == 'pull_request' + run: | + BRANCH_NAME="i18n-update/$(git rev-parse --short HEAD)" + git push -u origin "$BRANCH_NAME" + gh pr create --base "$GITHUB_REF_NAME" --head "$BRANCH_NAME" \ + --title "lang: update pot files" \ + --body "Automated POT file update from i18n-update workflow" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 7fc691aa62ba627ee9f578baf4f9accdc5ccf9ef Mon Sep 17 00:00:00 2001 From: andrepg <12430295+andrepg@users.noreply.github.com> Date: Mon, 13 Apr 2026 16:37:31 +0000 Subject: [PATCH 13/17] lang: update pot files --- po/es.po | 2 +- po/io.github.andrepg.Doit.pot | 2 +- po/pt_BR.po | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/po/es.po b/po/es.po index 391741a..179bc31 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 16:23+0000\n" +"POT-Creation-Date: 2026-04-13 16:37+0000\n" "PO-Revision-Date: 2026-04-07 21:05-0300\n" "Last-Translator: André Paul Grandsire \n" "Language-Team: Spanish\n" diff --git a/po/io.github.andrepg.Doit.pot b/po/io.github.andrepg.Doit.pot index fff6494..06b7faa 100644 --- a/po/io.github.andrepg.Doit.pot +++ b/po/io.github.andrepg.Doit.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 16:23+0000\n" +"POT-Creation-Date: 2026-04-13 16:37+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/po/pt_BR.po b/po/pt_BR.po index 3a390cf..83faec7 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 16:23+0000\n" +"POT-Creation-Date: 2026-04-13 16:37+0000\n" "PO-Revision-Date: 2026-04-07 21:15-0300\n" "Last-Translator: André Paul Grandsire \n" "Language-Team: Portuguese \n" From 8cec6bbe31b902009af77ecc6f9547c3d5b736d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 13:45:01 -0300 Subject: [PATCH 14/17] refactor: consolidate setup-project with system-deps and cleanup duplicate checkouts --- .github/actions/setup-project/action.yml | 20 ++++++++++++++++++++ .github/workflows/i18n-update.yml | 13 ++----------- .github/workflows/quality-checks.yml | 6 ------ .github/workflows/test-coverage.yml | 3 --- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/.github/actions/setup-project/action.yml b/.github/actions/setup-project/action.yml index 7a9b7f4..756a2af 100644 --- a/.github/actions/setup-project/action.yml +++ b/.github/actions/setup-project/action.yml @@ -6,6 +6,14 @@ inputs: description: 'If true, sets up Node.js and installs Yarn dependencies' required: false default: 'false' + setup-system-deps: + description: 'If true, installs system dependencies for GNOME/Flatpak builds' + required: false + default: 'false' + meson-version: + description: 'Meson version to install via pip (optional)' + required: false + default: '' runs: using: 'composite' @@ -22,6 +30,18 @@ runs: node-version: '24' cache: 'yarn' + - name: Install system dependencies + if: inputs.setup-system-deps == 'true' + shell: bash + run: | + sudo apt-get update + sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils appstream libglib2.0-dev libgjs0g gettext + + - name: Install Meson + if: inputs.meson-version != '' + shell: bash + run: pip3 install --break-system-packages "meson==${{ inputs.meson-version }}" + - name: Install dependencies if: inputs.setup-node == 'true' shell: bash diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index 3e45654..b182622 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -16,21 +16,12 @@ jobs: name: '[build] update translations' runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v6 - with: - fetch-depth: 1 - - - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y ninja-build gjs python3-pip desktop-file-utils appstream libglib2.0-dev libgjs0g gettext - - - name: Install Meson - run: pip3 install --break-system-packages meson==1.4.0 - - name: Setup Project uses: ./.github/actions/setup-project with: setup-node: 'true' + setup-system-deps: 'true' + meson-version: '1.4.0' - name: Update POT files run: yarn pot-generator diff --git a/.github/workflows/quality-checks.yml b/.github/workflows/quality-checks.yml index 3dfaec9..d4980b6 100644 --- a/.github/workflows/quality-checks.yml +++ b/.github/workflows/quality-checks.yml @@ -12,9 +12,6 @@ jobs: runs-on: ubuntu-latest continue-on-error: true steps: - - name: Checkout code - uses: actions/checkout@v6 - - name: Setup Project uses: ./.github/actions/setup-project with: @@ -28,9 +25,6 @@ jobs: runs-on: ubuntu-latest continue-on-error: true steps: - - name: Checkout code - uses: actions/checkout@v6 - - name: Setup Project uses: ./.github/actions/setup-project with: diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index d95f6b6..15ce878 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -12,9 +12,6 @@ jobs: runs-on: ubuntu-latest continue-on-error: true steps: - - name: Checkout code - uses: actions/checkout@v6 - - name: Setup Project uses: ./.github/actions/setup-project with: From a4e472e5d59804fbf94a6760a27a3c5688dfa055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 13:45:01 -0300 Subject: [PATCH 15/17] fix: add c_ keyword for typescript translations in pot generation --- po/meson.build | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/po/meson.build b/po/meson.build index 0a6b0ae..1a942cc 100644 --- a/po/meson.build +++ b/po/meson.build @@ -1,7 +1,11 @@ i18n.gettext( app_id, - args: '--directory=' + meson.project_source_root() / 'po', preset: 'glib', + args: [ + '--keyword=C_:1c,2', + '--flag=C_:2:pass-c-format', + '--directory=' + meson.project_source_root() / 'po', + ], install_dir: 'share/locale' ) From 5dd52bb1d48fb170e463bff06dca599e2326074e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 14:01:33 -0300 Subject: [PATCH 16/17] fix: use full action paths instead of relative paths --- .github/workflows/bundle-validation.yml | 4 ++-- .github/workflows/flatpak-bundle.yml | 2 +- .github/workflows/i18n-update.yml | 2 +- .github/workflows/quality-checks.yml | 4 ++-- .github/workflows/test-coverage.yml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/bundle-validation.yml b/.github/workflows/bundle-validation.yml index 937b328..da38e3e 100644 --- a/.github/workflows/bundle-validation.yml +++ b/.github/workflows/bundle-validation.yml @@ -36,7 +36,7 @@ jobs: fetch-depth: 1 - name: Setup Project - uses: ./.github/actions/setup-project + uses: andrepg/do-it/.github/actions/setup-project with: setup-node: 'true' @@ -69,7 +69,7 @@ jobs: fetch-depth: 1 - name: Setup Project - uses: ./.github/actions/setup-project + uses: andrepg/do-it/.github/actions/setup-project with: setup-node: 'true' diff --git a/.github/workflows/flatpak-bundle.yml b/.github/workflows/flatpak-bundle.yml index b6924db..c762b65 100644 --- a/.github/workflows/flatpak-bundle.yml +++ b/.github/workflows/flatpak-bundle.yml @@ -45,7 +45,7 @@ jobs: sparse-checkout-cone-mode: false - name: Setup Project - uses: ./.github/actions/setup-project + uses: andrepg/do-it/.github/actions/setup-project - name: Setup GPG run: | diff --git a/.github/workflows/i18n-update.yml b/.github/workflows/i18n-update.yml index b182622..ecc2212 100644 --- a/.github/workflows/i18n-update.yml +++ b/.github/workflows/i18n-update.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup Project - uses: ./.github/actions/setup-project + uses: andrepg/do-it/.github/actions/setup-project with: setup-node: 'true' setup-system-deps: 'true' diff --git a/.github/workflows/quality-checks.yml b/.github/workflows/quality-checks.yml index d4980b6..f03a7e7 100644 --- a/.github/workflows/quality-checks.yml +++ b/.github/workflows/quality-checks.yml @@ -13,7 +13,7 @@ jobs: continue-on-error: true steps: - name: Setup Project - uses: ./.github/actions/setup-project + uses: andrepg/do-it/.github/actions/setup-project with: setup-node: 'true' @@ -26,7 +26,7 @@ jobs: continue-on-error: true steps: - name: Setup Project - uses: ./.github/actions/setup-project + uses: andrepg/do-it/.github/actions/setup-project with: setup-node: 'true' diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 15ce878..47df8ae 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -13,7 +13,7 @@ jobs: continue-on-error: true steps: - name: Setup Project - uses: ./.github/actions/setup-project + uses: andrepg/do-it/.github/actions/setup-project with: setup-node: 'true' From c87166a50ffaa9dea880ecabf0da0b97a0238ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Paul=20Grandsire?= Date: Mon, 13 Apr 2026 14:06:01 -0300 Subject: [PATCH 17/17] fix: regenerate pot files with typescript c_ keywords --- po/es.po | 283 ++++++++++++++++++--------------- po/io.github.andrepg.Doit.pot | 158 ++++++++++++++++++- po/pt_BR.po | 285 +++++++++++++++++++--------------- 3 files changed, 472 insertions(+), 254 deletions(-) diff --git a/po/es.po b/po/es.po index 179bc31..8dc5391 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 16:37+0000\n" +"POT-Creation-Date: 2026-04-13 13:22-0300\n" "PO-Revision-Date: 2026-04-07 21:05-0300\n" "Last-Translator: André Paul Grandsire \n" "Language-Team: Spanish\n" @@ -15,6 +15,162 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: src/app.strings.ts:26 +msgctxt "sorting" +msgid "Older to newer" +msgstr "Más antiguas primero" + +#: src/app.strings.ts:27 +msgctxt "sorting" +msgid "To do first" +msgstr "Pendientes primero" + +#: src/app.strings.ts:28 src/app.strings.ts:29 +msgctxt "sorting" +msgid "A to Z" +msgstr "A a Z" + +#: src/app.strings.ts:32 +msgctxt "sorting" +msgid "Newer to older" +msgstr "Más recientes primero" + +#: src/app.strings.ts:33 +msgctxt "sorting" +msgid "Done first" +msgstr "Completadas primero" + +#: src/app.strings.ts:34 src/app.strings.ts:35 +msgctxt "sorting" +msgid "Z to A" +msgstr "Z a A" + +#: src/app.strings.ts:39 +msgctxt "sorting-field" +msgid "Date" +msgstr "Fecha" + +#: src/app.strings.ts:40 +msgctxt "sorting-field" +msgid "Status" +msgstr "Estado" + +#: src/app.strings.ts:41 +msgctxt "sorting-field" +msgid "Title" +msgstr "Título" + +#: src/app.strings.ts:42 +msgctxt "sorting-field" +msgid "Project" +msgstr "Proyecto" + +#: src/app.strings.ts:48 +msgctxt "task-list" +msgid "Tasks" +msgstr "Tareas" + +#: src/app.strings.ts:49 +msgctxt "task-list" +msgid "No tasks found" +msgstr "No hay tareas" + +#: src/app.strings.ts:50 +msgctxt "task-list" +msgid "All tasks" +msgstr "Todas las tareas" + +#: src/app.strings.ts:51 +msgctxt "task-list" +msgid "Without project" +msgstr "Sin proyecto" + +#: src/app.strings.ts:52 +#, javascript-format +msgctxt "task-group" +msgid "%s finished, %s deleted" +msgstr "%s completadas, %s eliminadas" + +#: src/app.strings.ts:56 +msgctxt "task-form" +msgid "Title cannot be empty" +msgstr "El título no puede estar vacío" + +#: src/app.strings.ts:60 +msgctxt "toast" +msgid "Task created" +msgstr "Tarea creada" + +#: src/app.strings.ts:61 +msgctxt "toast" +msgid "Task edited" +msgstr "Tarea editada" + +#: src/app.strings.ts:62 +msgctxt "toast" +msgid "Task updated" +msgstr "Tarea actualizada" + +#: src/app.strings.ts:63 +msgctxt "toast" +msgid "Task restored" +msgstr "Tarea restaurada" + +#: src/app.strings.ts:64 +msgctxt "toast" +msgid "Task deleted" +msgstr "Tarea eliminada" + +#: src/app.strings.ts:65 +msgctxt "toast" +msgid "Tasks purged" +msgstr "Tareas eliminadas" + +#: src/app.strings.ts:66 +msgctxt "toast" +msgid "Task finished" +msgstr "Tarea completada" + +#: src/app.strings.ts:72 +msgctxt "backup" +msgid "Save Tasks As…" +msgstr "Guardar Tareas Como…" + +#: src/app.strings.ts:73 +msgctxt "backup" +msgid "Import Tasks…" +msgstr "Importar Tareas…" + +#: src/app.strings.ts:75 +msgctxt "backup" +msgid "Database exported successfully" +msgstr "Exportación completada con éxito" + +#: src/app.strings.ts:76 +msgctxt "backup" +msgid "Error exporting database" +msgstr "Error al exportar datos" + +#: src/app.strings.ts:78 +msgctxt "backup" +msgid "Database imported successfully" +msgstr "Importación completada con éxito" + +#: src/app.strings.ts:79 +msgctxt "backup" +msgid "Error importing database" +msgstr "Error al importar datos" + +#: src/app.strings.ts:82 +msgctxt "about" +msgid "translators-credits" +msgstr "André Paul Grandsire/andrepg@users.noreply.github.com" + +#: src/app.strings.ts:83 +msgctxt "about" +msgid "Donate" +msgstr "Donar" + #: src/platform/gnome/widgets/application.ui:13 msgid "Purge deleted tasks" msgstr "Eliminar tareas excluídas" @@ -127,131 +283,6 @@ msgstr "Ordenar tareas por" msgid "Order strategy" msgstr "Estrategia de ordenación" -#~ msgctxt "sorting" -#~ msgid "Older to newer" -#~ msgstr "Más antiguas primero" - -#~ msgctxt "sorting" -#~ msgid "To do first" -#~ msgstr "Pendientes primero" - -#~ msgctxt "sorting" -#~ msgid "A to Z" -#~ msgstr "A a Z" - -#~ msgctxt "sorting" -#~ msgid "Newer to older" -#~ msgstr "Más recientes primero" - -#~ msgctxt "sorting" -#~ msgid "Done first" -#~ msgstr "Completadas primero" - -#~ msgctxt "sorting" -#~ msgid "Z to A" -#~ msgstr "Z a A" - -#~ msgctxt "sorting-field" -#~ msgid "Date" -#~ msgstr "Fecha" - -#~ msgctxt "sorting-field" -#~ msgid "Status" -#~ msgstr "Estado" - -#~ msgctxt "sorting-field" -#~ msgid "Title" -#~ msgstr "Título" - -#~ msgctxt "sorting-field" -#~ msgid "Project" -#~ msgstr "Proyecto" - -#~ msgctxt "task-list" -#~ msgid "Tasks" -#~ msgstr "Tareas" - -#~ msgctxt "task-list" -#~ msgid "No tasks found" -#~ msgstr "No hay tareas" - -#~ msgctxt "task-list" -#~ msgid "All tasks" -#~ msgstr "Todas las tareas" - -#~ msgctxt "task-list" -#~ msgid "Without project" -#~ msgstr "Sin proyecto" - -#, javascript-format -#~ msgctxt "task-group" -#~ msgid "%s finished, %s deleted" -#~ msgstr "%s completadas, %s eliminadas" - -#~ msgctxt "task-form" -#~ msgid "Title cannot be empty" -#~ msgstr "El título no puede estar vacío" - -#~ msgctxt "toast" -#~ msgid "Task created" -#~ msgstr "Tarea creada" - -#~ msgctxt "toast" -#~ msgid "Task edited" -#~ msgstr "Tarea editada" - -#~ msgctxt "toast" -#~ msgid "Task updated" -#~ msgstr "Tarea actualizada" - -#~ msgctxt "toast" -#~ msgid "Task restored" -#~ msgstr "Tarea restaurada" - -#~ msgctxt "toast" -#~ msgid "Task deleted" -#~ msgstr "Tarea eliminada" - -#~ msgctxt "toast" -#~ msgid "Tasks purged" -#~ msgstr "Tareas eliminadas" - -#~ msgctxt "toast" -#~ msgid "Task finished" -#~ msgstr "Tarea completada" - -#~ msgctxt "backup" -#~ msgid "Save Tasks As…" -#~ msgstr "Guardar Tareas Como…" - -#~ msgctxt "backup" -#~ msgid "Import Tasks…" -#~ msgstr "Importar Tareas…" - -#~ msgctxt "backup" -#~ msgid "Database exported successfully" -#~ msgstr "Exportación completada con éxito" - -#~ msgctxt "backup" -#~ msgid "Error exporting database" -#~ msgstr "Error al exportar datos" - -#~ msgctxt "backup" -#~ msgid "Database imported successfully" -#~ msgstr "Importación completada con éxito" - -#~ msgctxt "backup" -#~ msgid "Error importing database" -#~ msgstr "Error al importar datos" - -#~ msgctxt "about" -#~ msgid "translators-credits" -#~ msgstr "André Paul Grandsire/andrepg@users.noreply.github.com" - -#~ msgctxt "about" -#~ msgid "Donate" -#~ msgstr "Donar" - #~ msgid "Projects" #~ msgstr "Proyectos" diff --git a/po/io.github.andrepg.Doit.pot b/po/io.github.andrepg.Doit.pot index 06b7faa..18f425c 100644 --- a/po/io.github.andrepg.Doit.pot +++ b/po/io.github.andrepg.Doit.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 16:37+0000\n" +"POT-Creation-Date: 2026-04-13 13:22-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,6 +17,162 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: src/app.strings.ts:26 +msgctxt "sorting" +msgid "Older to newer" +msgstr "" + +#: src/app.strings.ts:27 +msgctxt "sorting" +msgid "To do first" +msgstr "" + +#: src/app.strings.ts:28 src/app.strings.ts:29 +msgctxt "sorting" +msgid "A to Z" +msgstr "" + +#: src/app.strings.ts:32 +msgctxt "sorting" +msgid "Newer to older" +msgstr "" + +#: src/app.strings.ts:33 +msgctxt "sorting" +msgid "Done first" +msgstr "" + +#: src/app.strings.ts:34 src/app.strings.ts:35 +msgctxt "sorting" +msgid "Z to A" +msgstr "" + +#: src/app.strings.ts:39 +msgctxt "sorting-field" +msgid "Date" +msgstr "" + +#: src/app.strings.ts:40 +msgctxt "sorting-field" +msgid "Status" +msgstr "" + +#: src/app.strings.ts:41 +msgctxt "sorting-field" +msgid "Title" +msgstr "" + +#: src/app.strings.ts:42 +msgctxt "sorting-field" +msgid "Project" +msgstr "" + +#: src/app.strings.ts:48 +msgctxt "task-list" +msgid "Tasks" +msgstr "" + +#: src/app.strings.ts:49 +msgctxt "task-list" +msgid "No tasks found" +msgstr "" + +#: src/app.strings.ts:50 +msgctxt "task-list" +msgid "All tasks" +msgstr "" + +#: src/app.strings.ts:51 +msgctxt "task-list" +msgid "Without project" +msgstr "" + +#: src/app.strings.ts:52 +#, javascript-format +msgctxt "task-group" +msgid "%s finished, %s deleted" +msgstr "" + +#: src/app.strings.ts:56 +msgctxt "task-form" +msgid "Title cannot be empty" +msgstr "" + +#: src/app.strings.ts:60 +msgctxt "toast" +msgid "Task created" +msgstr "" + +#: src/app.strings.ts:61 +msgctxt "toast" +msgid "Task edited" +msgstr "" + +#: src/app.strings.ts:62 +msgctxt "toast" +msgid "Task updated" +msgstr "" + +#: src/app.strings.ts:63 +msgctxt "toast" +msgid "Task restored" +msgstr "" + +#: src/app.strings.ts:64 +msgctxt "toast" +msgid "Task deleted" +msgstr "" + +#: src/app.strings.ts:65 +msgctxt "toast" +msgid "Tasks purged" +msgstr "" + +#: src/app.strings.ts:66 +msgctxt "toast" +msgid "Task finished" +msgstr "" + +#: src/app.strings.ts:72 +msgctxt "backup" +msgid "Save Tasks As…" +msgstr "" + +#: src/app.strings.ts:73 +msgctxt "backup" +msgid "Import Tasks…" +msgstr "" + +#: src/app.strings.ts:75 +msgctxt "backup" +msgid "Database exported successfully" +msgstr "" + +#: src/app.strings.ts:76 +msgctxt "backup" +msgid "Error exporting database" +msgstr "" + +#: src/app.strings.ts:78 +msgctxt "backup" +msgid "Database imported successfully" +msgstr "" + +#: src/app.strings.ts:79 +msgctxt "backup" +msgid "Error importing database" +msgstr "" + +#: src/app.strings.ts:82 +msgctxt "about" +msgid "translators-credits" +msgstr "" + +#: src/app.strings.ts:83 +msgctxt "about" +msgid "Donate" +msgstr "" + #: src/platform/gnome/widgets/application.ui:13 msgid "Purge deleted tasks" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index 83faec7..790f94d 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: io.github.andrepg.Doit\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-13 16:37+0000\n" +"POT-Creation-Date: 2026-04-13 13:22-0300\n" "PO-Revision-Date: 2026-04-07 21:15-0300\n" "Last-Translator: André Paul Grandsire \n" "Language-Team: Portuguese \n" @@ -20,6 +20,163 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 50.0\n" +#: src/app.strings.ts:26 +msgctxt "sorting" +msgid "Older to newer" +msgstr "Mais antigas primeiro" + +#: src/app.strings.ts:27 +msgctxt "sorting" +msgid "To do first" +msgstr "Pendentes primeiro" + +#: src/app.strings.ts:28 src/app.strings.ts:29 +msgctxt "sorting" +msgid "A to Z" +msgstr "A a Z" + +#: src/app.strings.ts:32 +msgctxt "sorting" +msgid "Newer to older" +msgstr "Mais novas primeiro" + +#: src/app.strings.ts:33 +msgctxt "sorting" +msgid "Done first" +msgstr "Concluídas primeiro" + +#: src/app.strings.ts:34 src/app.strings.ts:35 +msgctxt "sorting" +msgid "Z to A" +msgstr "Z a A" + +#: src/app.strings.ts:39 +msgctxt "sorting-field" +msgid "Date" +msgstr "Data" + +#: src/app.strings.ts:40 +msgctxt "sorting-field" +msgid "Status" +msgstr "Status" + +# I think that this string can be merged with the previous one (from src/platform/gnome/widgets/task-form.ui:20). +#: src/app.strings.ts:41 +msgctxt "sorting-field" +msgid "Title" +msgstr "Título" + +#: src/app.strings.ts:42 +msgctxt "sorting-field" +msgid "Project" +msgstr "Projeto" + +#: src/app.strings.ts:48 +msgctxt "task-list" +msgid "Tasks" +msgstr "Tarefas" + +#: src/app.strings.ts:49 +msgctxt "task-list" +msgid "No tasks found" +msgstr "Nenhuma tarefa encontrada" + +#: src/app.strings.ts:50 +msgctxt "task-list" +msgid "All tasks" +msgstr "Suas tarefas" + +#: src/app.strings.ts:51 +msgctxt "task-list" +msgid "Without project" +msgstr "Sem projeto" + +#: src/app.strings.ts:52 +#, javascript-format +msgctxt "task-group" +msgid "%s finished, %s deleted" +msgstr "%s concluídas, %s excluídas" + +#: src/app.strings.ts:56 +msgctxt "task-form" +msgid "Title cannot be empty" +msgstr "Título não pode ser vazio" + +#: src/app.strings.ts:60 +msgctxt "toast" +msgid "Task created" +msgstr "Tarefa criada" + +#: src/app.strings.ts:61 +msgctxt "toast" +msgid "Task edited" +msgstr "Tarefa modificada" + +#: src/app.strings.ts:62 +msgctxt "toast" +msgid "Task updated" +msgstr "Tarefa atualizada" + +#: src/app.strings.ts:63 +msgctxt "toast" +msgid "Task restored" +msgstr "Tarefa restaurada" + +#: src/app.strings.ts:64 +msgctxt "toast" +msgid "Task deleted" +msgstr "Tarefa excluída" + +#: src/app.strings.ts:65 +msgctxt "toast" +msgid "Tasks purged" +msgstr "Tarefas excluídas descartadas" + +#: src/app.strings.ts:66 +msgctxt "toast" +msgid "Task finished" +msgstr "Tarefa finalizada" + +#: src/app.strings.ts:72 +msgctxt "backup" +msgid "Save Tasks As…" +msgstr "Salvar Tarefas Como…" + +#: src/app.strings.ts:73 +msgctxt "backup" +msgid "Import Tasks…" +msgstr "Importar Tarefas…" + +#: src/app.strings.ts:75 +msgctxt "backup" +msgid "Database exported successfully" +msgstr "Exportação concluída com sucesso." + +#: src/app.strings.ts:76 +msgctxt "backup" +msgid "Error exporting database" +msgstr "Erro ao exportar dados" + +#: src/app.strings.ts:78 +msgctxt "backup" +msgid "Database imported successfully" +msgstr "Banco de dados importado com sucesso" + +#: src/app.strings.ts:79 +msgctxt "backup" +msgid "Error importing database" +msgstr "Erro ao importar dados" + +#: src/app.strings.ts:82 +msgctxt "about" +msgid "translators-credits" +msgstr "André Paul Grandsire/andrepg@users.noreply.github.com" + +#: src/app.strings.ts:83 +msgctxt "about" +msgid "Donate" +msgstr "Fazer uma doação" + #: src/platform/gnome/widgets/application.ui:13 msgid "Purge deleted tasks" msgstr "Descartar tarefas excluídas" @@ -133,132 +290,6 @@ msgstr "Ordenar tarefas por" msgid "Order strategy" msgstr "Estratégia de ordenação" -#~ msgctxt "sorting" -#~ msgid "Older to newer" -#~ msgstr "Mais antigas primeiro" - -#~ msgctxt "sorting" -#~ msgid "To do first" -#~ msgstr "Pendentes primeiro" - -#~ msgctxt "sorting" -#~ msgid "A to Z" -#~ msgstr "A a Z" - -#~ msgctxt "sorting" -#~ msgid "Newer to older" -#~ msgstr "Mais novas primeiro" - -#~ msgctxt "sorting" -#~ msgid "Done first" -#~ msgstr "Concluídas primeiro" - -#~ msgctxt "sorting" -#~ msgid "Z to A" -#~ msgstr "Z a A" - -#~ msgctxt "sorting-field" -#~ msgid "Date" -#~ msgstr "Data" - -#~ msgctxt "sorting-field" -#~ msgid "Status" -#~ msgstr "Status" - -# I think that this string can be merged with the previous one (from src/platform/gnome/widgets/task-form.ui:20). -#~ msgctxt "sorting-field" -#~ msgid "Title" -#~ msgstr "Título" - -#~ msgctxt "sorting-field" -#~ msgid "Project" -#~ msgstr "Projeto" - -#~ msgctxt "task-list" -#~ msgid "Tasks" -#~ msgstr "Tarefas" - -#~ msgctxt "task-list" -#~ msgid "No tasks found" -#~ msgstr "Nenhuma tarefa encontrada" - -#~ msgctxt "task-list" -#~ msgid "All tasks" -#~ msgstr "Suas tarefas" - -#~ msgctxt "task-list" -#~ msgid "Without project" -#~ msgstr "Sem projeto" - -#, javascript-format -#~ msgctxt "task-group" -#~ msgid "%s finished, %s deleted" -#~ msgstr "%s concluídas, %s excluídas" - -#~ msgctxt "task-form" -#~ msgid "Title cannot be empty" -#~ msgstr "Título não pode ser vazio" - -#~ msgctxt "toast" -#~ msgid "Task created" -#~ msgstr "Tarefa criada" - -#~ msgctxt "toast" -#~ msgid "Task edited" -#~ msgstr "Tarefa modificada" - -#~ msgctxt "toast" -#~ msgid "Task updated" -#~ msgstr "Tarefa atualizada" - -#~ msgctxt "toast" -#~ msgid "Task restored" -#~ msgstr "Tarefa restaurada" - -#~ msgctxt "toast" -#~ msgid "Task deleted" -#~ msgstr "Tarefa excluída" - -#~ msgctxt "toast" -#~ msgid "Tasks purged" -#~ msgstr "Tarefas excluídas descartadas" - -#~ msgctxt "toast" -#~ msgid "Task finished" -#~ msgstr "Tarefa finalizada" - -#~ msgctxt "backup" -#~ msgid "Save Tasks As…" -#~ msgstr "Salvar Tarefas Como…" - -#~ msgctxt "backup" -#~ msgid "Import Tasks…" -#~ msgstr "Importar Tarefas…" - -#~ msgctxt "backup" -#~ msgid "Database exported successfully" -#~ msgstr "Exportação concluída com sucesso." - -#~ msgctxt "backup" -#~ msgid "Error exporting database" -#~ msgstr "Erro ao exportar dados" - -#~ msgctxt "backup" -#~ msgid "Database imported successfully" -#~ msgstr "Banco de dados importado com sucesso" - -#~ msgctxt "backup" -#~ msgid "Error importing database" -#~ msgstr "Erro ao importar dados" - -#~ msgctxt "about" -#~ msgid "translators-credits" -#~ msgstr "André Paul Grandsire/andrepg@users.noreply.github.com" - -#~ msgctxt "about" -#~ msgid "Donate" -#~ msgstr "Fazer uma doação" - #~ msgid "Projects" #~ msgstr "Projetos"