Skip to content

fix(l10n): load app translations so Dutch displays in Procest (2)#7

Closed
WilcoLouwerse wants to merge 48 commits intodevelopmentfrom
feature/wilco-testing
Closed

fix(l10n): load app translations so Dutch displays in Procest (2)#7
WilcoLouwerse wants to merge 48 commits intodevelopmentfrom
feature/wilco-testing

Conversation

@WilcoLouwerse
Copy link
Copy Markdown

@WilcoLouwerse WilcoLouwerse commented Mar 6, 2026

Procest: l10n completeness, Dutch display fix, and settings cleanup

fix-dutch-display

Root cause: Nextcloud does not auto-inject translations for apps like Procest. The Vue app mounted before translations were loaded, causing all UI text to fall back to raw keys.

  • Wrap new Vue(...).$mount() inside loadTranslations('procest', callback) in main.js and settings.js so the locale bundle is fetched before the app renders
  • Import translate as t and translatePlural as n from @nextcloud/l10n (the package exports these names, not the shorthand t/n directly)

complete-l10n

With Dutch display now working, all translation keys needed to exist.

  • Added ~250 missing keys to both l10n/en.json and l10n/nl.json (302 total keys each), covering dashboard stats, dialogs, form fields, validation messages, ZGW-specific labels, and priority levels

fix-settings-bug

  • Replaced the NcAppNavigationSettings dropdown (which contained "Case Types" and "Configuration") with a single direct Settings navigation item
  • Removed the /case-types named route; it now redirects to Settings to avoid broken links
  • Removes unused NcAppNavigationSettings and ShapeOutline imports

openspec

  • Added openspec/verify-l10n.js: a Node script that validates JSON syntax, key parity between locale files, placeholder consistency ({placeholder} matching), and coverage of translation keys used in source — runnable from the app root with node openspec/verify-l10n.js
  • Archived all three changes under openspec/archive/

rubenvdlinde and others added 30 commits February 26, 2026 15:14
Document the promotion-based branching model (feature→development→beta→main),
hotfix policy, required quality checks, and local development workflow
with a mermaid flow diagram.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds NcAppSettingsDialog-based user settings accessible from sidebar
Configuration menu. Consolidates UserPreferencesController into
SettingsController. Backend uses OCP\IConfig for per-user storage.
Updates register schema JSON and repair step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New modal dialog for creating tasks from list view. Dashboard KPI card
hover fixes. Case and task list views updated with consistent filtering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rary

AdminRoot uses CnSettingsSection for Case Type Management section.
Settings wraps form in CnSettingsSection with doc-url and loading state.
Webpack dedup aliases use $ suffix for exact-match.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…webpack alias

Makes the shared library work in both monorepo dev (local source alias)
and CI/production builds (npm package from git). The alias only activates
when ../nextcloud-vue/src exists.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces github:ConductionNL/nextcloud-vue#main with ^0.1.0-beta.1
from npm registry. Faster installs, no git clone + build step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Nextcloud App Store schema does not accept EUPL-1.2 as a valid
licence value, causing all release uploads to fail with HTTP 400.
Revert to 'agpl' which is in the accepted set.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add vimeo/psalm ^5.26 + psalm.xml config
- Add phpstan/phpstan ^1.10 + phpstan.neon config
- Add nextcloud/coding-standard, phpcsstandards/phpcsextra
- Add roave/security-advisories, edgedesign/phpqa
- Add psalm, phpstan, phpmetrics:violations, phpcs:output, phpqa scripts
- Fix phpmetrics:violations flag to --violations-xml (matching OpenRegister)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e coverage

Replaces the one-liner README with a comprehensive document covering:
- Logo and CI badges header
- Screenshots table (dashboard, cases, admin)
- Detailed feature sections organized by category
- Mermaid architecture diagram
- Data model table with CMMN 1.1 and ZGW API mappings
- Directory structure
- Requirements, installation, and development guide
- Tech stack and standards/compliance

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tcloud-vue

Replaces manual currentView/currentRoute navigation with vue-router.
App.vue now renders <router-view /> and mounts CnIndexSidebar globally.
CaseList and TaskList are refactored to use CnIndexPage with schema-
driven columns and built-in CRUD dialogs. Adds src/router/ for route
definitions. Updates procest_register.json schema and bumps dependencies.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat: Migrate to Vue Router and refactor views to @conduction/nextcloud-vue
- Add @conduction/nextcloud-vue to import/ignore and import/no-unresolved
  ignore list (package is resolved via webpack alias at build time;
  published npm version may lag behind local source)
- Fix vue/no-mutating-props in UserSettings.vue: replace :open.sync with
  :open + @update:open emit pattern
- Regenerate package-lock.json to include @conduction/nextcloud-vue
  (was missing from lock file, causing npm ci failure in CI)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixes indentation and formatting issues flagged by vue/html-indent and
vue/singleline-html-element-content-newline rules that are enforced
consistently in the CI environment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: Resolve ESLint errors and update package-lock.json
…ud-vue@0.1.0-beta.3

@conduction/nextcloud-vue@0.1.0-beta.3 now ships css/index.css at the package
root, so the css/index.css import and all named exports resolve correctly.
Removes the temporary import/ignore and import/no-unresolved ignore rules.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: Standardize logos, fix ESLint errors, upgrade to @conduction/nextcloud-vue@0.1.0-beta.3
…sable

Replace boilerplate setup/teardown sidebar methods, fetchCases/fetchTasks,
and computed store refs with useListView(objectType, { sidebarState,
defaultSort }) in setup().

- CaseList.vue: useListView('case', { sidebarState, defaultSort: deadline asc })
  Supplementary loadCaseTypes/loadStatusTypes remain in mounted() since
  they load independent reference data for template formatters.
- TaskList.vue: useListView('task', { sidebarState, defaultSort: dueDate asc })
  loadCaseTitle helper preserved in methods; calls useObjectStore() directly.

All entity-specific logic (deadline/status formatting, row classes,
quick-status dropdown, case title resolution) is unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add phpunit.xml with PHPUnit 10.5 configuration
- Add tests/bootstrap.php with OCP class autoloader
- Add tests/unit/Controller/SettingsControllerTest.php (2 tests)
- Update .github/workflows/code-quality.yml to run PHPUnit on every PR
- Fix composer.json test:unit script to use correct vendor binary

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Psalm (Static Analysis) step to code-quality.yml php-quality job

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…lateParam in Psalm

Add DeepLinkRegistrationEvent to UndefinedClass suppressions (runtime OpenRegister dependency)
and add MissingTemplateParam suppressor for IEventListener generic param to reach 0 Psalm errors.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
# Conflicts:
#	.github/workflows/code-quality.yml
#	composer.json
#	psalm.xml
complete-l10n:
- Add ~250 missing keys to l10n/en.json and l10n/nl.json (302 total)
- Archive complete-l10n change

fix-settings-bug:
- Replace settings dropdown with single Settings button in MainMenu.vue
- Remove /case-types route from router
- Archive fix-settings-bug change

fix-dutch-display:
- Load app translations via loadTranslations('procest') before Vue mount
  (Nextcloud does not inject Procest's l10n)
- Use translate as t, translatePlural as n from @nextcloud/l10n
  (package exports translate/translatePlural, not t/n)
- Apply to main.js and settings.js
- Archive fix-dutch-display change

openspec:
- Add verify-l10n.js for l10n validation (JSON, key sync, placeholders)
- Add phpstan-bootstrap.php to register OCP/NCU autoloading (nextcloud/ocp has no composer autoload)
- Add ignoreErrors for OCP unknown classes, invalid types, and OpenRegister runtime dependency
- Fixes 76 PHPStan errors in CI

Made-with: Cursor
- Move AI/IDE config and workflows to parent apps-extra folder
- Add to .gitignore to prevent re-adding

Made-with: Cursor
WilcoLouwerse and others added 8 commits March 9, 2026 13:19
Enforces line ending normalization and binary file detection to prevent cross-platform issues and accidental corruption. Improves codebase consistency and reduces merge conflicts.
- Replace non-existent CnDashboardPage with custom dashboard layout
- Add getCurrentUserId() helper, replace deprecated OC.currentUser
- Remove v-html in ActivityFeed, use Unicode chars for icons

Made-with: Cursor
- Archived 3 completed OpenSpec changes (zgw-autorisaties-api, zgw-newman-test-suite, zgw-notificaties-api) to openspec/changes/archive/
- Synced their specs to openspec/specs/ (zgw-autorisaties, zgw-newman, zgw-notificaties)
- Added full multi-perspective test results (functional, UX, accessibility, performance, security, API) + summary README
- Updated feature-counsel report and comprehensive test results
- Added test-results/screenshots to .gitignore
@WilcoLouwerse WilcoLouwerse force-pushed the feature/wilco-testing branch from a8fb52d to b21f61a Compare March 17, 2026 11:57
…ration spec

- Archive fix-settings-url-bug change to openspec/changes/archive/2026-03-17-fix-settings-url-bug/
- Add REQ-OREG-014 (Frontend API URL Construction) to main openregister-integration spec
- Update administration.md feature doc to document generateUrl() pattern
- Resolve all merge conflicts
- l10n: merge both key sets (373 en, 378 nl keys total)
- phpstan.neon: merge ignoreErrors from both branches
- src/main.js: combine loadTranslations (fix-dutch-display) with initializeStores (development)
- openspec specs, PHP config, Vue files: take development version
@github-actions
Copy link
Copy Markdown
Contributor

Quality Report

Repository ConductionNL/procest
Commit 7b81d75
Branch 7/merge
Event pull_request
Generated 2026-03-19 10:11 UTC
Workflow Run https://github.com/ConductionNL/procest/actions/runs/23289888556

Summary

Group Result
PHP Quality FAIL
Vue Quality FAIL
Security PASS
License PASS
PHPUnit SKIP
Newman SKIP

PHP Quality

Tool Result
lint PASS
phpcs FAIL
phpmd PASS
psalm PASS
phpstan PASS
phpmetrics PASS

Vue Quality

Tool Result
eslint FAIL
stylelint FAIL

Security

Ecosystem Result
composer PASS
npm PASS

License Compliance

Ecosystem Result
composer PASS
npm PASS

composer dependencies (100 total)

Metric Count
Approved (allowlist) 100
Approved (override) 0
Denied 0

npm dependencies (241 total)

Metric Count
Approved (allowlist) 241
Approved (override) 0
Denied 0

PHPUnit Tests

PHPUnit tests were not enabled for this run.

Integration Tests (Newman)

Newman integration tests were not enabled for this run.


Generated automatically by the Quality workflow.

Download the full PDF report from the workflow artifacts.

- PHP: convert inline ternaries to if/else (PEAR standard)
- PHP: change elseif to else if
- PHP: strip em-dash from @SuppressWarnings tags
- PHP: change phpstan inline doc comments to single-line format
- Vue: wrap multiple template roots in single div (vue/no-multiple-template-root)
- Vue: migrate plain style blocks to scoped with :deep() (vue/enforce-style-attribute)
- Vue: fix max-attributes-per-line in App.vue
- eslint: disable import/named for @conduction/nextcloud-vue
- stylelint: add required rules property to config
- Convert all remaining inline ternary operators to if/else blocks
- Align equals signs in consecutive assignment groups
- Fix inline doc block comment format
- Affected files: ZtcController, DrcController, ZrcController, ZgwService, ZgwZtcRulesService, ZgwZrcRulesService
- Remove over-padded equals alignment on non-grouped assignments
- Change single-line block comment to inline comment
- Add end comment for long if block (PEAR requirement)
- Fix iot variable padding
@rubenvdlinde
Copy link
Copy Markdown
Contributor

Closing — i18n/l10n fixes have already been applied directly to development.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants