@wazir-dev/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# i18n/RTL Expertise Research Progress
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
- Total: 33
|
|
5
|
+
- Done: 33
|
|
6
|
+
- Remaining: 0
|
|
7
|
+
|
|
8
|
+
## Modules
|
|
9
|
+
|
|
10
|
+
### Foundations
|
|
11
|
+
- [x] i18n-architecture.md (2026-03-08)
|
|
12
|
+
- [x] unicode-and-encoding.md (2026-03-08)
|
|
13
|
+
- [x] locale-and-language-tags.md (2026-03-08)
|
|
14
|
+
- [x] string-externalization.md (2026-03-08)
|
|
15
|
+
- [x] pluralization-and-gender.md (2026-03-08)
|
|
16
|
+
- [x] date-time-calendars.md (2026-03-08)
|
|
17
|
+
- [x] numbers-currency-units.md (2026-03-08)
|
|
18
|
+
- [x] text-direction-bidi.md (2026-03-08)
|
|
19
|
+
|
|
20
|
+
### RTL
|
|
21
|
+
- [x] rtl-fundamentals.md (2026-03-08)
|
|
22
|
+
- [x] rtl-layout-mirroring.md (2026-03-08)
|
|
23
|
+
- [x] rtl-typography.md (2026-03-08)
|
|
24
|
+
- [x] rtl-icons-and-images.md (2026-03-08)
|
|
25
|
+
- [x] rtl-navigation-and-gestures.md (2026-03-08)
|
|
26
|
+
- [x] rtl-forms-and-input.md (2026-03-08)
|
|
27
|
+
- [x] rtl-animations-and-transitions.md (2026-03-08)
|
|
28
|
+
- [x] rtl-testing-and-qa.md (2026-03-08)
|
|
29
|
+
- [x] arabic-specific.md (2026-03-08)
|
|
30
|
+
- [x] hebrew-specific.md (2026-03-08)
|
|
31
|
+
|
|
32
|
+
### Platform
|
|
33
|
+
- [x] flutter-i18n.md (2026-03-08)
|
|
34
|
+
- [x] react-i18n.md (2026-03-08)
|
|
35
|
+
- [x] native-ios-i18n.md (2026-03-08)
|
|
36
|
+
- [x] native-android-i18n.md (2026-03-08)
|
|
37
|
+
- [x] web-css-i18n.md (2026-03-08)
|
|
38
|
+
- [x] backend-i18n.md (2026-03-08)
|
|
39
|
+
|
|
40
|
+
### Content
|
|
41
|
+
- [x] translation-management.md (2026-03-08)
|
|
42
|
+
- [x] machine-translation-integration.md (2026-03-08)
|
|
43
|
+
- [x] content-adaptation.md (2026-03-08)
|
|
44
|
+
- [x] locale-specific-formatting.md (2026-03-08)
|
|
45
|
+
|
|
46
|
+
### Advanced
|
|
47
|
+
- [x] bidirectional-text-algorithm.md (2026-03-08)
|
|
48
|
+
- [x] complex-scripts.md (2026-03-08)
|
|
49
|
+
- [x] accessibility-and-i18n.md (2026-03-08)
|
|
50
|
+
- [x] performance-and-i18n.md (2026-03-08)
|
|
51
|
+
- [x] testing-i18n.md (2026-03-08)
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Final Summary (2026-03-08)
|
|
56
|
+
|
|
57
|
+
All 33 i18n/RTL expertise modules are complete. The knowledge base covers:
|
|
58
|
+
|
|
59
|
+
- **Foundations:** Architecture, Unicode, locale tags, string externalization, pluralization, dates, numbers, BiDi
|
|
60
|
+
- **RTL:** Fundamentals, layout mirroring, typography, icons, navigation, forms, animations, testing, Arabic-specific, Hebrew-specific
|
|
61
|
+
- **Platform:** Flutter, React, Web CSS, iOS, Android, Backend
|
|
62
|
+
- **Content:** Translation management, MT, content adaptation, locale formatting
|
|
63
|
+
- **Advanced:** BiDi algorithm, complex scripts, accessibility, performance, testing
|
|
64
|
+
|
|
65
|
+
Use these modules during Clarifier (architecture) and Dev (implementation) to bake i18n in from day one.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Accessibility and i18n — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> lang and dir attributes aid screen readers; RTL affects reading order. Ensure accessible labels, focus order, and semantic structure in all locales.
|
|
4
|
+
|
|
5
|
+
> **Category:** Advanced
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **Key standards:** WCAG, W3C
|
|
8
|
+
> **RTL impact:** High — focus order, reading order
|
|
9
|
+
|
|
10
|
+
## 1. lang and dir
|
|
11
|
+
|
|
12
|
+
- `lang` on html and elements with language change
|
|
13
|
+
- `dir` for base direction
|
|
14
|
+
- Screen readers use both for pronunciation and order
|
|
15
|
+
|
|
16
|
+
## 2. Focus Order
|
|
17
|
+
|
|
18
|
+
- Tab order should follow visual order
|
|
19
|
+
- In RTL, that means right-to-left
|
|
20
|
+
- Ensure focusable elements in correct sequence
|
|
21
|
+
|
|
22
|
+
## 3. Labels and ARIA
|
|
23
|
+
|
|
24
|
+
- Accessible names in correct language
|
|
25
|
+
- Don't mix languages in single label without lang attribute
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
*Researched: 2026-03-08 | Sources: WCAG, W3C*
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Bidirectional Text Algorithm — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Unicode UAX #9: how the BiDi algorithm resolves display order from logical order. Character types, embedding levels, and when to use overrides (LRI, RLI, PDI, LRM, RLM).
|
|
4
|
+
|
|
5
|
+
> **Category:** Advanced
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **Key standards:** Unicode UAX #9
|
|
8
|
+
> **RTL impact:** Critical — foundation of BiDi
|
|
9
|
+
|
|
10
|
+
## 1. Algorithm Overview
|
|
11
|
+
|
|
12
|
+
1. **Classify** characters (L, R, AL, EN, AN, NSM, etc.)
|
|
13
|
+
2. **Resolve** embedding levels from base direction
|
|
14
|
+
3. **Reorder** for display
|
|
15
|
+
|
|
16
|
+
## 2. Character Types
|
|
17
|
+
|
|
18
|
+
- **L (strong LTR):** Latin, digits in LTR context
|
|
19
|
+
- **R (strong RTL):** Hebrew
|
|
20
|
+
- **AL (Arabic letter):** Arabic
|
|
21
|
+
- **EN (European number):** 0-9
|
|
22
|
+
- **AN (Arabic number):** ٠-٩
|
|
23
|
+
- **NSM:** Combining marks
|
|
24
|
+
|
|
25
|
+
## 3. When Algorithm Fails
|
|
26
|
+
|
|
27
|
+
- Neutral characters between runs
|
|
28
|
+
- Spillover (number after RTL phrase)
|
|
29
|
+
- Use RLI/PDI (isolate) or LRM/RLM (mark)
|
|
30
|
+
|
|
31
|
+
## 4. Control Characters
|
|
32
|
+
|
|
33
|
+
- LRI, RLI, FSI, PDI — isolate (prefer)
|
|
34
|
+
- LRE, RLE, PDF — embed (legacy, spillover risk)
|
|
35
|
+
- LRM, RLM — single-character marks
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
*Researched: 2026-03-08 | Sources: Unicode UAX #9, W3C BiDi*
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Complex Scripts — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Arabic shaping, Hebrew final forms, Indic conjuncts, and CJK: OpenType, HarfBuzz, and rendering requirements. Font and engine support matter.
|
|
4
|
+
|
|
5
|
+
> **Category:** Advanced
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **Key standards:** OpenType, Unicode
|
|
8
|
+
> **RTL impact:** High — Arabic, Hebrew are complex scripts
|
|
9
|
+
|
|
10
|
+
## 1. Script Requirements
|
|
11
|
+
|
|
12
|
+
- **Arabic:** Contextual forms, ligatures, shaping
|
|
13
|
+
- **Hebrew:** Final forms, niqqud
|
|
14
|
+
- **Indic:** Conjuncts, reordering
|
|
15
|
+
- **CJK:** Ideographs, line breaking
|
|
16
|
+
|
|
17
|
+
## 2. Implementation
|
|
18
|
+
|
|
19
|
+
- Use fonts with OpenType support
|
|
20
|
+
- HarfBuzz (or platform shaper) for shaping
|
|
21
|
+
- Test with real text
|
|
22
|
+
|
|
23
|
+
## 3. Anti-Patterns
|
|
24
|
+
|
|
25
|
+
- Font without script support
|
|
26
|
+
- Truncation that splits grapheme clusters
|
|
27
|
+
- Assuming 1 char = 1 glyph
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
*Researched: 2026-03-08 | Sources: OpenType, Unicode*
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Performance and i18n — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Lazy load locale data; avoid bundling all languages. Split by locale or namespace. Measure bundle size impact.
|
|
4
|
+
|
|
5
|
+
> **Category:** Advanced
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **RTL impact:** Low
|
|
8
|
+
|
|
9
|
+
## 1. Lazy Loading
|
|
10
|
+
|
|
11
|
+
- Load translation files on demand
|
|
12
|
+
- Dynamic import per locale
|
|
13
|
+
- Don't bundle ar, he, zh if user only needs en
|
|
14
|
+
|
|
15
|
+
## 2. Bundle Size
|
|
16
|
+
|
|
17
|
+
- Each locale adds KB
|
|
18
|
+
- Split by namespace (auth, dashboard, etc.)
|
|
19
|
+
- Tree-shake unused keys if supported
|
|
20
|
+
|
|
21
|
+
## 3. Caching
|
|
22
|
+
|
|
23
|
+
- Cache loaded locale data
|
|
24
|
+
- CDN for static locale JSON
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
*Researched: 2026-03-08*
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Testing i18n — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Pseudo-localization, missing key detection, locale switching tests, and RTL visual regression. Automate what you can.
|
|
4
|
+
|
|
5
|
+
> **Category:** Advanced
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **RTL impact:** Critical — RTL needs dedicated tests
|
|
8
|
+
|
|
9
|
+
## 1. Pseudo-Localization
|
|
10
|
+
|
|
11
|
+
- Expand/accent strings to find truncation
|
|
12
|
+
- RTL pseudo (ar-XB) for layout
|
|
13
|
+
- Bracket keys to find untranslated
|
|
14
|
+
|
|
15
|
+
## 2. Automated Checks
|
|
16
|
+
|
|
17
|
+
- Lint for physical CSS properties
|
|
18
|
+
- CI: run with RTL locale
|
|
19
|
+
- Snapshot/visual regression for RTL
|
|
20
|
+
|
|
21
|
+
## 3. Manual
|
|
22
|
+
|
|
23
|
+
- Real Arabic/Hebrew
|
|
24
|
+
- Forms, navigation, mixed content
|
|
25
|
+
- Screen reader with RTL
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
*Researched: 2026-03-08 | Sources: Android pseudolocales, testing guides*
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Content Adaptation — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Beyond translation: cultural adaptation of images, colors, symbols, and formats. What works in one market may not in another.
|
|
4
|
+
|
|
5
|
+
> **Category:** Content
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **RTL impact:** High — RTL markets have distinct cultural norms
|
|
8
|
+
|
|
9
|
+
## 1. Cultural Adaptation
|
|
10
|
+
|
|
11
|
+
- **Images:** Avoid culture-specific gestures, symbols
|
|
12
|
+
- **Colors:** Red = luck (China) vs danger (West)
|
|
13
|
+
- **Dates/calendars:** Hijri, Hebrew where relevant
|
|
14
|
+
- **Numbers:** Eastern vs Western Arabic numerals
|
|
15
|
+
|
|
16
|
+
## 2. RTL-Specific
|
|
17
|
+
|
|
18
|
+
- Layout mirrors; content may need different imagery
|
|
19
|
+
- Icons: directional vs universal
|
|
20
|
+
- Text in images: avoid; use overlay
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
*Researched: 2026-03-08*
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Locale-Specific Formatting — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Date, number, currency, list, and unit formatting vary by locale. Use CLDR/Intl; document locale-specific expectations.
|
|
4
|
+
|
|
5
|
+
> **Category:** Content
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **RTL impact:** Medium — numeral system, date format
|
|
8
|
+
|
|
9
|
+
## 1. Formatting by Locale
|
|
10
|
+
|
|
11
|
+
- **Date:** Gregorian, Hijri, Hebrew, etc.
|
|
12
|
+
- **Number:** Decimal (.,), grouping, numerals
|
|
13
|
+
- **Currency:** Symbol position, spacing
|
|
14
|
+
- **List:** And/or/conjunction rules
|
|
15
|
+
|
|
16
|
+
## 2. Implementation
|
|
17
|
+
|
|
18
|
+
- Intl.DateTimeFormat, Intl.NumberFormat
|
|
19
|
+
- Pass locale explicitly
|
|
20
|
+
- Never hardcode formats
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
*Researched: 2026-03-08 | Sources: CLDR*
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Machine Translation Integration — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> MT for scale; human for quality. When to use MT vs human, post-editing, and integration patterns. MT helps volume; doesn't fix architectural mistakes.
|
|
4
|
+
|
|
5
|
+
> **Category:** Content
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **RTL impact:** Medium — MT supports Arabic, Hebrew
|
|
8
|
+
|
|
9
|
+
## 1. When to Use
|
|
10
|
+
|
|
11
|
+
- **MT:** High volume, low risk, internal tools
|
|
12
|
+
- **Human:** Marketing, legal, UX-critical
|
|
13
|
+
- **Hybrid:** MT + human review
|
|
14
|
+
|
|
15
|
+
## 2. Integration
|
|
16
|
+
|
|
17
|
+
- TMS often has MT built-in (Google, DeepL, etc.)
|
|
18
|
+
- API integration for custom flows
|
|
19
|
+
- Post-edit workflow
|
|
20
|
+
|
|
21
|
+
## 3. Limitations
|
|
22
|
+
|
|
23
|
+
- Doesn't fix concatenation, wrong plural
|
|
24
|
+
- Context matters; provide it
|
|
25
|
+
- RTL: MT outputs correct script; layout is separate
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
*Researched: 2026-03-08*
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Translation Management — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Translation workflow: TMS (Crowdin, Lokalise, Phrase), key naming, context for translators, and continuous localization. Integrate early; avoid batch-at-end.
|
|
4
|
+
|
|
5
|
+
> **Category:** Content
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **Key standards:** XLIFF, TMS APIs
|
|
8
|
+
> **RTL impact:** Medium — TMS must handle RTL preview
|
|
9
|
+
|
|
10
|
+
## 1. Workflow
|
|
11
|
+
|
|
12
|
+
- Extract strings → Push to TMS → Translate → Pull to repo
|
|
13
|
+
- Continuous: sync on commit; batch: before release
|
|
14
|
+
- Key naming: semantic, hierarchical
|
|
15
|
+
|
|
16
|
+
## 2. Tools
|
|
17
|
+
|
|
18
|
+
- Crowdin, Lokalise, Phrase, Transifex
|
|
19
|
+
- Integrate via API or CLI
|
|
20
|
+
- Provide context: screenshots, descriptions, max length
|
|
21
|
+
|
|
22
|
+
## 3. Quality
|
|
23
|
+
|
|
24
|
+
- Glossary, style guide
|
|
25
|
+
- Review workflow
|
|
26
|
+
- QA for RTL, truncation
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
*Researched: 2026-03-08 | Sources: TMS vendors*
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Date, Time, and Calendars — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Never hardcode date formats. Use `Intl.DateTimeFormat` or equivalent. Calendars vary: Gregorian, Hijri, Hebrew, Persian, Buddhist, Japanese Imperial. Locale determines default format and calendar.
|
|
4
|
+
|
|
5
|
+
> **Category:** Foundation
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **Key standards:** CLDR, Intl API
|
|
8
|
+
> **RTL impact:** Low — dates are locale-specific, not direction-specific
|
|
9
|
+
|
|
10
|
+
## 1. Core Concepts
|
|
11
|
+
|
|
12
|
+
### Calendars in Use
|
|
13
|
+
|
|
14
|
+
| Calendar | Locales | Use |
|
|
15
|
+
|----------|---------|-----|
|
|
16
|
+
| **Gregorian** | Most | Default for en, fr, de, etc. |
|
|
17
|
+
| **Hijri (Islamic)** | ar-SA, religious | Saudi civil, Muslim religious |
|
|
18
|
+
| **Hebrew** | he-IL | Jewish holidays, traditional |
|
|
19
|
+
| **Persian (Solar Hijri)** | fa-IR | Iran |
|
|
20
|
+
| **Buddhist** | th-TH | Thailand |
|
|
21
|
+
| **Japanese Imperial** | ja-JP | Japan (optional) |
|
|
22
|
+
|
|
23
|
+
### Intl.DateTimeFormat
|
|
24
|
+
|
|
25
|
+
```javascript
|
|
26
|
+
new Intl.DateTimeFormat('ar-SA', {
|
|
27
|
+
calendar: 'islamic',
|
|
28
|
+
year: 'numeric',
|
|
29
|
+
month: 'long',
|
|
30
|
+
day: 'numeric'
|
|
31
|
+
}).format(new Date());
|
|
32
|
+
|
|
33
|
+
new Intl.DateTimeFormat('he-IL', {
|
|
34
|
+
calendar: 'hebrew',
|
|
35
|
+
year: 'numeric',
|
|
36
|
+
month: 'long'
|
|
37
|
+
}).format(new Date());
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Format by Locale
|
|
41
|
+
|
|
42
|
+
- **en-US:** MM/DD/YYYY
|
|
43
|
+
- **en-GB:** DD/MM/YYYY
|
|
44
|
+
- **de-DE:** DD.MM.YYYY
|
|
45
|
+
- **ja-JP:** YYYY年M月D日
|
|
46
|
+
- **ar-SA:** Often Hijri; format varies
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 2. Anti-Patterns
|
|
51
|
+
|
|
52
|
+
1. **Hardcoded MM/DD/YYYY** — Wrong for 96% of world
|
|
53
|
+
2. **Assuming Gregorian** — Offer Hijri for ar-SA, Hebrew for he-IL
|
|
54
|
+
3. **No timezone** — Use `timeZone` option or store UTC, display local
|
|
55
|
+
4. **12h vs 24h** — Locale-dependent; use `hour12` from locale or user pref
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Quick Reference Checklist
|
|
60
|
+
|
|
61
|
+
- [ ] Use Intl.DateTimeFormat (or platform equivalent)
|
|
62
|
+
- [ ] Pass locale explicitly
|
|
63
|
+
- [ ] Support non-Gregorian calendars where relevant
|
|
64
|
+
- [ ] Handle timezone
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
*Researched: 2026-03-08 | Sources: MDN Intl.DateTimeFormat, CLDR calendars*
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# i18n Architecture — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> The foundational architecture for internationalization: separation of concerns, standards alignment, and design decisions that prevent technical debt. Getting this wrong means every subsequent i18n effort is fighting the codebase.
|
|
4
|
+
|
|
5
|
+
> **Category:** Foundation
|
|
6
|
+
> **Applies to:** All (Mobile, Web, Backend)
|
|
7
|
+
> **Key standards:** Unicode, CLDR, BCP 47 (RFC 5646), ICU, W3C i18n
|
|
8
|
+
> **RTL impact:** High — architecture must accommodate bidirectional layout from day one
|
|
9
|
+
|
|
10
|
+
## 1. Core Concepts
|
|
11
|
+
|
|
12
|
+
### What This Area Covers and Why It Matters
|
|
13
|
+
|
|
14
|
+
Internationalization (i18n) is the design and development of software so it can be adapted for users from any culture, region, or language without engineering changes. Localization (L10n) is the actual adaptation of content and formats for a specific locale. Architecture determines whether i18n is a first-class concern or an expensive retrofit.
|
|
15
|
+
|
|
16
|
+
**Why architecture matters:**
|
|
17
|
+
- Retrofitting i18n costs **3–5× more** than building it in from the start
|
|
18
|
+
- Every hardcoded string, format assumption, and layout direction creates debt
|
|
19
|
+
- Poor architecture forces translators to work around code instead of with it
|
|
20
|
+
|
|
21
|
+
### Fundamental Rules and Standards
|
|
22
|
+
|
|
23
|
+
| Standard | Purpose |
|
|
24
|
+
|----------|---------|
|
|
25
|
+
| **Unicode** | Character encoding; every character has a code point; UTF-8 is the default encoding |
|
|
26
|
+
| **CLDR** (Common Locale Data Repository) | Locale-specific data: plural rules, date/number formats, currency, collation |
|
|
27
|
+
| **BCP 47** (RFC 5646) | Language tags: `en-US`, `ar-SA`, `zh-Hans-CN` — structure and lookup |
|
|
28
|
+
| **ICU** (International Components for Unicode) | MessageFormat for plurals/gender/select; formatting APIs |
|
|
29
|
+
| **W3C i18n** | Web-specific guidelines: HTML `lang`/`dir`, CSS logical properties, BiDi |
|
|
30
|
+
|
|
31
|
+
### Common Misconceptions
|
|
32
|
+
|
|
33
|
+
1. **"i18n is just translating strings"** — False. i18n encompasses text direction, number/date/currency formats, pluralization, gender agreement, collation, input methods, fonts, and layout. String translation is one slice.
|
|
34
|
+
|
|
35
|
+
2. **"We'll add i18n later"** — The most expensive approach. Strings are embedded in components, formats are hardcoded, layouts assume LTR. Later = hunt-and-replace across the codebase.
|
|
36
|
+
|
|
37
|
+
3. **"UTF-8 is enough"** — UTF-8 handles encoding. It does not handle RTL, pluralization, locale-specific formatting, or mixed-script text.
|
|
38
|
+
|
|
39
|
+
4. **"One translation file per language"** — Flat files don't scale. Namespacing, lazy loading, and key organization matter.
|
|
40
|
+
|
|
41
|
+
5. **"Machine translation will fix it"** — MT helps with volume; it does not fix architectural mistakes (concatenation, missing context, wrong plural forms).
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 2. Implementation Patterns
|
|
46
|
+
|
|
47
|
+
### Separation of Concerns
|
|
48
|
+
|
|
49
|
+
**Rule:** All locale-specific elements live outside application logic.
|
|
50
|
+
|
|
51
|
+
| Element | Locale-Specific | Where It Lives |
|
|
52
|
+
|---------|-----------------|----------------|
|
|
53
|
+
| User-facing strings | Yes | Translation files (ARB, JSON, XLIFF, PO) |
|
|
54
|
+
| Date formats | Yes | CLDR / `Intl.DateTimeFormat` |
|
|
55
|
+
| Number/currency formats | Yes | CLDR / `Intl.NumberFormat` |
|
|
56
|
+
| Plural rules | Yes | CLDR / ICU MessageFormat |
|
|
57
|
+
| Layout direction | Yes | `dir` attribute, logical CSS, `Directionality` widget |
|
|
58
|
+
| Collation (sort order) | Yes | `Intl.Collator` |
|
|
59
|
+
| Font selection | Yes | Per-script font stacks |
|
|
60
|
+
|
|
61
|
+
### Key Organization
|
|
62
|
+
|
|
63
|
+
**Semantic naming, not positional:**
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
❌ button_1, screen_3_title, modal_close
|
|
67
|
+
✅ auth.login.submit, dashboard.welcome.title, common.close
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Keys are a three-party contract: systems, translators, and developers. Structure by feature domain:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
locales/
|
|
74
|
+
en/
|
|
75
|
+
auth.json → auth.login, auth.register, auth.forgotPassword
|
|
76
|
+
dashboard.json → dashboard.welcome, dashboard.stats
|
|
77
|
+
common.json → common.save, common.cancel, common.loading
|
|
78
|
+
ar/
|
|
79
|
+
auth.json
|
|
80
|
+
...
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Data Structures and Formats
|
|
84
|
+
|
|
85
|
+
**ICU MessageFormat** — For complex messages (plurals, gender, select):
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
// Plural (Arabic has 6 forms)
|
|
89
|
+
{count, plural, zero {لا رسائل} one {رسالة واحدة} two {رسالتان} few {# رسائل} many {# رسالة} other {# رسالة}}
|
|
90
|
+
|
|
91
|
+
// Select (gender)
|
|
92
|
+
{gender, select, male {قام بزيارة} female {قامت بزيارة} other {زار}} {place}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Simple interpolation** — For straightforward strings:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
"Hello, {{name}}!"
|
|
99
|
+
"{{count}} items in cart"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Never concatenate:**
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
❌ "You have " + count + " new messages"
|
|
106
|
+
✅ t('messages.count', { count }) // "You have {count} new messages"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Framework-Agnostic Patterns
|
|
110
|
+
|
|
111
|
+
1. **Locale as explicit parameter** — Never infer locale from global state when formatting; pass it explicitly for testability.
|
|
112
|
+
2. **Fallback chain** — `ar-SA` → `ar` → `en` (or project default).
|
|
113
|
+
3. **Missing key policy** — Return key, return default, throw, or log — decide once and enforce.
|
|
114
|
+
4. **Lazy loading** — Load locale data on demand; don't bundle all languages in the initial payload.
|
|
115
|
+
|
|
116
|
+
### Code Examples
|
|
117
|
+
|
|
118
|
+
**Dart (Flutter):**
|
|
119
|
+
```dart
|
|
120
|
+
// ARB file: app_en.arb
|
|
121
|
+
"welcomeMessage": "Hello, {name}!",
|
|
122
|
+
"@welcomeMessage": { "placeholders": { "name": {} } }
|
|
123
|
+
|
|
124
|
+
"itemCount": "{count, plural, =0{No items} one{1 item} other{# items}}",
|
|
125
|
+
"@itemCount": { "placeholders": { "count": {} } }
|
|
126
|
+
|
|
127
|
+
// Usage
|
|
128
|
+
Text(AppLocalizations.of(context)!.welcomeMessage('أحمد'))
|
|
129
|
+
Text(AppLocalizations.of(context)!.itemCount(5))
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**TypeScript (react-intl):**
|
|
133
|
+
```tsx
|
|
134
|
+
<FormattedMessage
|
|
135
|
+
id="welcomeMessage"
|
|
136
|
+
defaultMessage="Hello, {name}!"
|
|
137
|
+
values={{ name: 'أحمد' }}
|
|
138
|
+
/>
|
|
139
|
+
<FormattedMessage
|
|
140
|
+
id="itemCount"
|
|
141
|
+
defaultMessage="{count, plural, =0{No items} one{1 item} other{# items}}"
|
|
142
|
+
values={{ count: 5 }}
|
|
143
|
+
/>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Swift (iOS):**
|
|
147
|
+
```swift
|
|
148
|
+
String(format: NSLocalizedString("welcome_message", comment: ""), "أحمد")
|
|
149
|
+
String(format: NSLocalizedString("item_count", comment: ""), count)
|
|
150
|
+
// Use .stringsdict for plurals
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Kotlin (Android):**
|
|
154
|
+
```kotlin
|
|
155
|
+
getString(R.string.welcome_message, "أحمد")
|
|
156
|
+
resources.getQuantityString(R.plurals.item_count, count, count)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 3. Locale Variations
|
|
162
|
+
|
|
163
|
+
### Arabic
|
|
164
|
+
- **Script:** Right-to-left, connected (cursive)
|
|
165
|
+
- **Numerals:** Western Arabic (0123) and Eastern Arabic (٠١٢٣) — user or region choice
|
|
166
|
+
- **Plurals:** 6 forms (zero, one, two, few, many, other)
|
|
167
|
+
- **Calendar:** Gregorian and Hijri (Islamic)
|
|
168
|
+
- **Example:** `ar-SA`, `ar-EG`, `ar-AE`
|
|
169
|
+
|
|
170
|
+
### German
|
|
171
|
+
- **Compound words:** Long (e.g., "Schlittschuhlaufen" vs "skating") — layout must accommodate 30%+ expansion
|
|
172
|
+
- **Decimal:** Comma as separator (1.234,56)
|
|
173
|
+
- **Date:** DD.MM.YYYY
|
|
174
|
+
- **Example:** `de-DE`, `de-AT`, `de-CH`
|
|
175
|
+
|
|
176
|
+
### Japanese / Chinese
|
|
177
|
+
- **No spaces:** Word boundaries differ; line breaking is script-specific
|
|
178
|
+
- **Vertical text:** Optional for Japanese
|
|
179
|
+
- **Multiple scripts:** Japanese mixes Hiragana, Katakana, Kanji
|
|
180
|
+
- **Example:** `ja-JP`, `zh-Hans-CN`, `zh-Hant-TW`
|
|
181
|
+
|
|
182
|
+
### Hindi
|
|
183
|
+
- **Complex conjuncts:** Devanagari script; conjunct formation affects rendering
|
|
184
|
+
- **Counting:** Different number words (e.g., lakh, crore)
|
|
185
|
+
- **Example:** `hi-IN`
|
|
186
|
+
|
|
187
|
+
### Turkish
|
|
188
|
+
- **Dotted vs dotless i:** `İ`/`i` vs `I`/`ı` — case conversion is locale-specific; `toUpperCase('i')` in Turkish yields `İ`, not `I`. Classic i18n bug.
|
|
189
|
+
- **Example:** `tr-TR`
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 4. Anti-Patterns
|
|
194
|
+
|
|
195
|
+
1. **String concatenation for sentences** — Breaks in every language with different word order. Use parameterized strings.
|
|
196
|
+
|
|
197
|
+
2. **Hardcoded date formats** — `MM/DD/YYYY` is wrong for 96% of the world. Use `Intl.DateTimeFormat` or equivalent.
|
|
198
|
+
|
|
199
|
+
3. **Assuming text length** — German ~30% longer, Chinese ~50% shorter. Design for expansion; avoid fixed-width containers.
|
|
200
|
+
|
|
201
|
+
4. **Assuming left-to-right** — Arabic, Hebrew, Persian, Urdu are RTL. Use logical properties from day one.
|
|
202
|
+
|
|
203
|
+
5. **Assuming single script** — Mixed content (e.g., English brand names in Arabic UI) requires BiDi handling.
|
|
204
|
+
|
|
205
|
+
6. **English plural rule** — `count === 1 ? 'item' : 'items'` fails for Arabic (6 forms), Russian (3 forms), etc. Use ICU plural.
|
|
206
|
+
|
|
207
|
+
7. **No locale in URLs/APIs** — Backend must know locale for formatting. Pass `Accept-Language` or explicit `locale` param.
|
|
208
|
+
|
|
209
|
+
8. **Keys as English text** — `"Welcome back"` as key ties you to English. Use semantic keys: `auth.welcomeBack`.
|
|
210
|
+
|
|
211
|
+
9. **Translating in the UI layer only** — Error messages, validation, API responses, logs shown to users must also be externalized.
|
|
212
|
+
|
|
213
|
+
10. **Ignoring RTL in layout** — `margin-left`, `padding-right`, `text-align: left` break in RTL. Use `margin-inline-start`, `padding-inline-end`, `text-align: start`.
|
|
214
|
+
|
|
215
|
+
11. **Single locale in backend** — User preference, not server default. Store and respect per-user locale.
|
|
216
|
+
|
|
217
|
+
12. **No fallback for missing translations** — Show key or default locale; never blank or crash.
|
|
218
|
+
|
|
219
|
+
13. **Synchronous loading of all locales** — Bundle size and memory. Lazy load by locale.
|
|
220
|
+
|
|
221
|
+
14. **Concatenating format strings** — `"Date: " + format(date)` — the format itself may need reordering. Use complete messages.
|
|
222
|
+
|
|
223
|
+
15. **Assuming ASCII for sorting** — Use `Intl.Collator` for locale-aware collation.
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 5. Testing Approach
|
|
228
|
+
|
|
229
|
+
### Pseudo-Localization
|
|
230
|
+
|
|
231
|
+
- Replace strings with expanded/accented versions to detect truncation and layout bugs
|
|
232
|
+
- Example: `Hello` → `Ĥéļļö` or `[Héllo]` with brackets to detect untranslated strings
|
|
233
|
+
|
|
234
|
+
### Character Coverage
|
|
235
|
+
|
|
236
|
+
- Test with real Arabic (العربية), Hebrew (עברית), and CJK text
|
|
237
|
+
- BiDi algorithm behaves differently with real text than with placeholders
|
|
238
|
+
|
|
239
|
+
### Edge Case Locales
|
|
240
|
+
|
|
241
|
+
- `ar-SA` (RTL, Arabic numerals, Hijri)
|
|
242
|
+
- `de-DE` (long compound words)
|
|
243
|
+
- `ja-JP` (no spaces, vertical text)
|
|
244
|
+
- `tr-TR` (dotted i)
|
|
245
|
+
- `hi-IN` (complex script)
|
|
246
|
+
|
|
247
|
+
### Verification Checklist
|
|
248
|
+
|
|
249
|
+
- [ ] All user-facing strings externalized
|
|
250
|
+
- [ ] No concatenation for building sentences
|
|
251
|
+
- [ ] Date/number/currency use locale APIs
|
|
252
|
+
- [ ] Pluralization uses ICU/CLDR
|
|
253
|
+
- [ ] RTL layout uses logical properties
|
|
254
|
+
- [ ] Missing keys have defined fallback
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Quick Reference Checklist
|
|
259
|
+
|
|
260
|
+
- [ ] Strings extracted from day one; no hardcoded user-facing text
|
|
261
|
+
- [ ] Keys are semantic; structure by feature domain
|
|
262
|
+
- [ ] ICU MessageFormat for plurals, gender, select
|
|
263
|
+
- [ ] No string concatenation for sentences
|
|
264
|
+
- [ ] Date/number/currency via `Intl` or platform equivalent
|
|
265
|
+
- [ ] Layout uses logical properties (start/end, not left/right)
|
|
266
|
+
- [ ] Locale passed explicitly; fallback chain defined
|
|
267
|
+
- [ ] Missing keys handled; no blank or crash
|
|
268
|
+
- [ ] Lazy load locale data
|
|
269
|
+
- [ ] Test with real Arabic/Hebrew and pseudo-localization
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
*Researched: 2026-03-08 | Sources: W3C i18n (w3.org/International), CLDR/ICU, BCP 47 (RFC 5646), IntlPull ICU MessageFormat guide, Locize/EzGlobe i18n anti-patterns*
|