@nextsparkjs/ai-workflow 0.1.0-beta.100

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.
Files changed (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/claude/_docs/workflows-optimizations.md +359 -0
  4. package/claude/agents/api-tester.md +634 -0
  5. package/claude/agents/architecture-supervisor.md +1351 -0
  6. package/claude/agents/backend-developer.md +997 -0
  7. package/claude/agents/backend-validator.md +417 -0
  8. package/claude/agents/bdd-docs-writer.md +737 -0
  9. package/claude/agents/block-developer.md +677 -0
  10. package/claude/agents/code-reviewer.md +1432 -0
  11. package/claude/agents/db-developer.md +721 -0
  12. package/claude/agents/db-validator.md +407 -0
  13. package/claude/agents/demo-video-generator.md +493 -0
  14. package/claude/agents/documentation-writer.md +1268 -0
  15. package/claude/agents/frontend-developer.md +1234 -0
  16. package/claude/agents/frontend-validator.md +777 -0
  17. package/claude/agents/functional-validator.md +630 -0
  18. package/claude/agents/mock-analyst.md +387 -0
  19. package/claude/agents/product-manager.md +963 -0
  20. package/claude/agents/qa-automation.md +1762 -0
  21. package/claude/agents/release-manager.md +634 -0
  22. package/claude/agents/selectors-translator.md +262 -0
  23. package/claude/agents/unit-test-writer.md +785 -0
  24. package/claude/agents/visual-comparator.md +329 -0
  25. package/claude/agents/workflow-maintainer.md +352 -0
  26. package/claude/commands/do/README.md +88 -0
  27. package/claude/commands/do/create-api.md +64 -0
  28. package/claude/commands/do/create-entity.md +66 -0
  29. package/claude/commands/do/create-migration.md +64 -0
  30. package/claude/commands/do/create-plugin.md +56 -0
  31. package/claude/commands/do/create-theme.md +70 -0
  32. package/claude/commands/do/mock-data.md +67 -0
  33. package/claude/commands/do/reset-db.md +71 -0
  34. package/claude/commands/do/setup-scheduled-action.md +75 -0
  35. package/claude/commands/do/sync-code-review.md +117 -0
  36. package/claude/commands/do/update-selectors.md +112 -0
  37. package/claude/commands/do/use-skills.md +90 -0
  38. package/claude/commands/do/validate-blocks.md +69 -0
  39. package/claude/commands/how-to/README.md +261 -0
  40. package/claude/commands/how-to/add-metadata.md +692 -0
  41. package/claude/commands/how-to/add-taxonomies.md +806 -0
  42. package/claude/commands/how-to/add-translations.md +571 -0
  43. package/claude/commands/how-to/create-api.md +577 -0
  44. package/claude/commands/how-to/create-block.md +575 -0
  45. package/claude/commands/how-to/create-child-entities.md +771 -0
  46. package/claude/commands/how-to/create-entity.md +597 -0
  47. package/claude/commands/how-to/create-migrations.md +605 -0
  48. package/claude/commands/how-to/create-plugin.md +654 -0
  49. package/claude/commands/how-to/customize-app.md +481 -0
  50. package/claude/commands/how-to/customize-dashboard.md +553 -0
  51. package/claude/commands/how-to/customize-theme.md +438 -0
  52. package/claude/commands/how-to/define-features-flows.md +632 -0
  53. package/claude/commands/how-to/deploy.md +507 -0
  54. package/claude/commands/how-to/handle-file-uploads.md +746 -0
  55. package/claude/commands/how-to/implement-search.md +1001 -0
  56. package/claude/commands/how-to/install-plugins.md +352 -0
  57. package/claude/commands/how-to/manage-test-coverage.md +984 -0
  58. package/claude/commands/how-to/run-tests.md +400 -0
  59. package/claude/commands/how-to/set-app-languages.md +601 -0
  60. package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
  61. package/claude/commands/how-to/set-scheduled-actions.md +527 -0
  62. package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
  63. package/claude/commands/how-to/setup-authentication.md +388 -0
  64. package/claude/commands/how-to/setup-claude-code.md +440 -0
  65. package/claude/commands/how-to/setup-database.md +274 -0
  66. package/claude/commands/how-to/setup-email-providers.md +598 -0
  67. package/claude/commands/how-to/setup-mobile-dev.md +627 -0
  68. package/claude/commands/how-to/start.md +500 -0
  69. package/claude/commands/how-to/use-devtools.md +639 -0
  70. package/claude/commands/how-to/use-superadmin.md +622 -0
  71. package/claude/commands/session/README.md +193 -0
  72. package/claude/commands/session/block-create.md +190 -0
  73. package/claude/commands/session/block-list.md +203 -0
  74. package/claude/commands/session/block-update.md +192 -0
  75. package/claude/commands/session/block-validate.md +218 -0
  76. package/claude/commands/session/changelog.md +115 -0
  77. package/claude/commands/session/close.md +225 -0
  78. package/claude/commands/session/commit.md +174 -0
  79. package/claude/commands/session/db-entity.md +206 -0
  80. package/claude/commands/session/db-fix.md +212 -0
  81. package/claude/commands/session/db-sample.md +206 -0
  82. package/claude/commands/session/demo.md +178 -0
  83. package/claude/commands/session/doc-bdd.md +207 -0
  84. package/claude/commands/session/doc-feature.md +218 -0
  85. package/claude/commands/session/doc-read.md +225 -0
  86. package/claude/commands/session/execute.md +204 -0
  87. package/claude/commands/session/explain.md +202 -0
  88. package/claude/commands/session/fix-bug.md +210 -0
  89. package/claude/commands/session/fix-build.md +182 -0
  90. package/claude/commands/session/fix-test.md +189 -0
  91. package/claude/commands/session/pending.md +232 -0
  92. package/claude/commands/session/refine.md +188 -0
  93. package/claude/commands/session/resume.md +192 -0
  94. package/claude/commands/session/review.md +192 -0
  95. package/claude/commands/session/scope-change.md +181 -0
  96. package/claude/commands/session/start-blocks.md +347 -0
  97. package/claude/commands/session/start.md +604 -0
  98. package/claude/commands/session/status.md +169 -0
  99. package/claude/commands/session/test-fix.md +221 -0
  100. package/claude/commands/session/test-run.md +203 -0
  101. package/claude/commands/session/test-write.md +242 -0
  102. package/claude/commands/session/validate.md +162 -0
  103. package/claude/config/context.json +40 -0
  104. package/claude/config/github.json +69 -0
  105. package/claude/config/github.schema.json +106 -0
  106. package/claude/config/team.json +46 -0
  107. package/claude/config/team.schema.json +106 -0
  108. package/claude/config/workspace.json +43 -0
  109. package/claude/config/workspace.schema.json +75 -0
  110. package/claude/skills/README.md +228 -0
  111. package/claude/skills/accessibility/SKILL.md +573 -0
  112. package/claude/skills/api-bypass-layers/SKILL.md +550 -0
  113. package/claude/skills/asana-integration/SKILL.md +499 -0
  114. package/claude/skills/better-auth/SKILL.md +666 -0
  115. package/claude/skills/billing-subscriptions/SKILL.md +660 -0
  116. package/claude/skills/block-decision-matrix/SKILL.md +359 -0
  117. package/claude/skills/clickup-integration/SKILL.md +434 -0
  118. package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
  119. package/claude/skills/create-plugin/SKILL.md +425 -0
  120. package/claude/skills/create-theme/SKILL.md +331 -0
  121. package/claude/skills/cypress-api/SKILL.md +511 -0
  122. package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
  123. package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
  124. package/claude/skills/cypress-e2e/SKILL.md +526 -0
  125. package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
  126. package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
  127. package/claude/skills/cypress-selectors/SKILL.md +309 -0
  128. package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
  129. package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
  130. package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
  131. package/claude/skills/database-migrations/SKILL.md +335 -0
  132. package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
  133. package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
  134. package/claude/skills/design-system/SKILL.md +682 -0
  135. package/claude/skills/documentation/SKILL.md +540 -0
  136. package/claude/skills/entity-api/SKILL.md +482 -0
  137. package/claude/skills/entity-system/SKILL.md +635 -0
  138. package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
  139. package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
  140. package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
  141. package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
  142. package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
  143. package/claude/skills/github/SKILL.md +467 -0
  144. package/claude/skills/i18n-nextintl/SKILL.md +302 -0
  145. package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
  146. package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
  147. package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
  148. package/claude/skills/impact-analysis/SKILL.md +203 -0
  149. package/claude/skills/jest-unit/SKILL.md +306 -0
  150. package/claude/skills/jest-unit/references/component-testing.md +371 -0
  151. package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
  152. package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
  153. package/claude/skills/jira-integration/SKILL.md +539 -0
  154. package/claude/skills/media-library/SKILL.md +743 -0
  155. package/claude/skills/mock-analysis/SKILL.md +276 -0
  156. package/claude/skills/monorepo-architecture/SKILL.md +162 -0
  157. package/claude/skills/nextjs-api-development/SKILL.md +364 -0
  158. package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
  159. package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
  160. package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
  161. package/claude/skills/notion-integration/SKILL.md +641 -0
  162. package/claude/skills/npm-development-workflow/SKILL.md +480 -0
  163. package/claude/skills/page-builder-blocks/SKILL.md +530 -0
  164. package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
  165. package/claude/skills/permissions-system/SKILL.md +619 -0
  166. package/claude/skills/plugins/SKILL.md +340 -0
  167. package/claude/skills/plugins/references/plugin-templates.md +414 -0
  168. package/claude/skills/plugins/references/plugin-testing.md +353 -0
  169. package/claude/skills/plugins/references/plugin-types.md +198 -0
  170. package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
  171. package/claude/skills/pom-patterns/SKILL.md +452 -0
  172. package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
  173. package/claude/skills/rate-limiting/SKILL.md +342 -0
  174. package/claude/skills/react-best-practices/AGENTS.md +2410 -0
  175. package/claude/skills/react-best-practices/README.md +123 -0
  176. package/claude/skills/react-best-practices/SKILL.md +125 -0
  177. package/claude/skills/react-best-practices/metadata.json +15 -0
  178. package/claude/skills/react-best-practices/rules/_sections.md +46 -0
  179. package/claude/skills/react-best-practices/rules/_template.md +28 -0
  180. package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  181. package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  182. package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
  183. package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
  184. package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
  185. package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
  186. package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  187. package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  188. package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  189. package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  190. package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  191. package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
  192. package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  193. package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  194. package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  195. package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  196. package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  197. package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  198. package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  199. package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  200. package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  201. package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
  202. package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  203. package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
  204. package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  205. package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  206. package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  207. package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  208. package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
  209. package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  210. package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  211. package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  212. package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  213. package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  214. package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  215. package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  216. package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  217. package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  218. package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  219. package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  220. package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
  221. package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  222. package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  223. package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  224. package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
  225. package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  226. package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
  227. package/claude/skills/react-patterns/SKILL.md +688 -0
  228. package/claude/skills/registry-system/SKILL.md +331 -0
  229. package/claude/skills/scheduled-actions/SKILL.md +671 -0
  230. package/claude/skills/scope-enforcement/SKILL.md +542 -0
  231. package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
  232. package/claude/skills/server-actions/SKILL.md +493 -0
  233. package/claude/skills/service-layer/SKILL.md +587 -0
  234. package/claude/skills/session-management/SKILL.md +266 -0
  235. package/claude/skills/session-management/scripts/create-session.py +166 -0
  236. package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
  237. package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
  238. package/claude/skills/session-management/scripts/session-archive.sh +87 -0
  239. package/claude/skills/session-management/scripts/session-close.sh +133 -0
  240. package/claude/skills/session-management/scripts/session-init.sh +225 -0
  241. package/claude/skills/session-management/scripts/session-list.sh +163 -0
  242. package/claude/skills/session-management/scripts/split-plan.sh +116 -0
  243. package/claude/skills/shadcn-components/SKILL.md +586 -0
  244. package/claude/skills/shadcn-theming/SKILL.md +446 -0
  245. package/claude/skills/suspense-loading/SKILL.md +280 -0
  246. package/claude/skills/tailwind-theming/SKILL.md +507 -0
  247. package/claude/skills/tanstack-query/SKILL.md +608 -0
  248. package/claude/skills/test-coverage/SKILL.md +239 -0
  249. package/claude/skills/web-design-guidelines/SKILL.md +39 -0
  250. package/claude/skills/zod-validation/SKILL.md +537 -0
  251. package/claude/templates/blocks/progress.md +86 -0
  252. package/claude/templates/iteration/changes.md +61 -0
  253. package/claude/templates/iteration/progress.md +55 -0
  254. package/claude/templates/log.md +31 -0
  255. package/claude/templates/story/context.md +77 -0
  256. package/claude/templates/story/pendings.md +37 -0
  257. package/claude/templates/story/plan.md +299 -0
  258. package/claude/templates/story/requirements.md +109 -0
  259. package/claude/templates/story/scope.json +10 -0
  260. package/claude/templates/story/tests.md +91 -0
  261. package/claude/templates/task/progress.md +58 -0
  262. package/claude/templates/task/requirements.md +54 -0
  263. package/claude/workflows/README.md +154 -0
  264. package/claude/workflows/blocks.md +614 -0
  265. package/claude/workflows/story.md +1207 -0
  266. package/claude/workflows/task.md +927 -0
  267. package/claude/workflows/tweak.md +527 -0
  268. package/cursor/.gitkeep +0 -0
  269. package/package.json +35 -0
  270. package/scripts/postinstall.mjs +198 -0
  271. package/scripts/setup.mjs +282 -0
  272. package/scripts/sync.mjs +209 -0
@@ -0,0 +1,601 @@
1
+ # /how-to:set-app-languages
2
+
3
+ Interactive guide to configure internationalization (i18n) in NextSpark.
4
+
5
+ ---
6
+
7
+ ## Required Skills
8
+
9
+ Before executing, these skills provide deeper context:
10
+ - `.claude/skills/i18n-nextintl/SKILL.md` - Internationalization patterns
11
+
12
+ ---
13
+
14
+ ## Syntax
15
+
16
+ ```
17
+ /how-to:set-app-languages
18
+ ```
19
+
20
+ ---
21
+
22
+ ## Behavior
23
+
24
+ Guides the user through configuring supported languages, adding translations, and working with the i18n system.
25
+
26
+ ---
27
+
28
+ ## Tutorial Structure
29
+
30
+ ```
31
+ STEPS OVERVIEW (5 steps)
32
+
33
+ Step 1: Understanding i18n Architecture
34
+ └── How translations work
35
+
36
+ Step 2: Configure Supported Languages
37
+ └── Add new locales
38
+
39
+ Step 3: Create Translation Files
40
+ └── Message structure
41
+
42
+ Step 4: Use Translations in Code
43
+ └── Components and hooks
44
+
45
+ Step 5: Add Entity Translations
46
+ └── Per-entity messages
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Step 1: Understanding i18n Architecture
52
+
53
+ ```
54
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
55
+ 📚 HOW TO: SET APP LANGUAGES
56
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
57
+
58
+ STEP 1 OF 5: Understanding i18n Architecture
59
+
60
+ NextSpark uses next-intl with a layered message system:
61
+
62
+ ┌─────────────────────────────────────────────┐
63
+ │ MESSAGE LAYERS (merged at runtime) │
64
+ │ ───────────────────────────────────────── │
65
+ │ │
66
+ │ 1. CORE MESSAGES │
67
+ │ core/messages/{locale}.json │
68
+ │ → Common UI, errors, auth │
69
+ │ │
70
+ │ 2. THEME MESSAGES │
71
+ │ themes/{theme}/messages/{locale}.json │
72
+ │ → Theme-specific text │
73
+ │ │
74
+ │ 3. ENTITY MESSAGES │
75
+ │ entities/{entity}/messages/{locale}.json│
76
+ │ → Per-entity labels │
77
+ │ │
78
+ │ 4. PLUGIN MESSAGES │
79
+ │ plugins/{plugin}/messages/{locale}.json │
80
+ │ → Plugin-specific text │
81
+ │ │
82
+ └─────────────────────────────────────────────┘
83
+
84
+ All layers merge: Theme > Core (theme wins on conflicts)
85
+
86
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
87
+
88
+ 📋 Namespace Groups:
89
+
90
+ • common.* - Buttons, labels, status
91
+ • auth.* - Login, register, errors
92
+ • dashboard.* - Dashboard UI
93
+ • entities.* - Entity-specific labels
94
+ • blocks.* - Page builder blocks
95
+ • billing.* - Plans, subscriptions
96
+
97
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
98
+
99
+ What would you like to do?
100
+
101
+ [1] Continue to Step 2 (Configure Languages)
102
+ [2] Show me the message file structure
103
+ [3] How does language detection work?
104
+ ```
105
+
106
+ ---
107
+
108
+ ## Step 2: Configure Supported Languages
109
+
110
+ ```
111
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
112
+ STEP 2 OF 5: Configure Supported Languages
113
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
114
+
115
+ Configure languages in your theme's app config:
116
+ ```
117
+
118
+ **📋 app.config.ts Example:**
119
+
120
+ ```typescript
121
+ // contents/themes/your-theme/config/app.config.ts
122
+ import type { AppConfig } from '@/core/types/app'
123
+
124
+ export const appConfig: AppConfig = {
125
+ // Default language for new users
126
+ defaultLocale: 'en',
127
+
128
+ // Supported languages
129
+ locales: ['en', 'es', 'pt', 'fr', 'de'],
130
+
131
+ // Language labels for UI
132
+ localeLabels: {
133
+ en: 'English',
134
+ es: 'Español',
135
+ pt: 'Português',
136
+ fr: 'Français',
137
+ de: 'Deutsch',
138
+ },
139
+
140
+ // Language detection settings
141
+ localeDetection: {
142
+ // Detect from browser headers
143
+ detectFromHeader: true,
144
+
145
+ // Detect from URL path (/es/dashboard)
146
+ detectFromPath: true,
147
+
148
+ // Store preference in cookie
149
+ storeCookie: true,
150
+ },
151
+ }
152
+ ```
153
+
154
+ **📋 Adding a New Language:**
155
+
156
+ 1. Add locale code to `locales` array
157
+ 2. Add label to `localeLabels`
158
+ 3. Create message files for the locale
159
+ 4. Rebuild the registry
160
+
161
+ **📋 Locale Codes:**
162
+
163
+ Use standard ISO 639-1 codes:
164
+ - en - English
165
+ - es - Spanish
166
+ - pt - Portuguese
167
+ - fr - French
168
+ - de - German
169
+ - it - Italian
170
+ - zh - Chinese
171
+ - ja - Japanese
172
+ - ko - Korean
173
+ - ar - Arabic (RTL)
174
+
175
+ ```
176
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
177
+
178
+ What would you like to do?
179
+
180
+ [1] Continue to Step 3 (Create Translations)
181
+ [2] How do I add RTL language support?
182
+ [3] Can I use regional variants (en-US, en-GB)?
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Step 3: Create Translation Files
188
+
189
+ ```
190
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
191
+ STEP 3 OF 5: Create Translation Files
192
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
193
+ ```
194
+
195
+ **📂 Theme Messages Structure:**
196
+
197
+ ```
198
+ contents/themes/your-theme/messages/
199
+ ├── en.json # English (required)
200
+ ├── es.json # Spanish
201
+ ├── pt.json # Portuguese
202
+ └── ...
203
+ ```
204
+
205
+ **📋 Message File Template (en.json):**
206
+
207
+ ```json
208
+ {
209
+ "common": {
210
+ "buttons": {
211
+ "save": "Save",
212
+ "cancel": "Cancel",
213
+ "delete": "Delete",
214
+ "edit": "Edit",
215
+ "create": "Create",
216
+ "submit": "Submit",
217
+ "back": "Back"
218
+ },
219
+ "status": {
220
+ "loading": "Loading...",
221
+ "saving": "Saving...",
222
+ "success": "Success!",
223
+ "error": "An error occurred"
224
+ },
225
+ "labels": {
226
+ "name": "Name",
227
+ "email": "Email",
228
+ "phone": "Phone",
229
+ "address": "Address",
230
+ "date": "Date",
231
+ "status": "Status"
232
+ },
233
+ "teamRoles": {
234
+ "owner": "Owner",
235
+ "admin": "Administrator",
236
+ "member": "Member",
237
+ "viewer": "Viewer"
238
+ }
239
+ },
240
+
241
+ "dashboard": {
242
+ "title": "Dashboard",
243
+ "welcome": "Welcome, {name}!",
244
+ "sidebar": {
245
+ "home": "Home",
246
+ "settings": "Settings",
247
+ "profile": "Profile"
248
+ }
249
+ },
250
+
251
+ "auth": {
252
+ "login": {
253
+ "title": "Sign In",
254
+ "email": "Email address",
255
+ "password": "Password",
256
+ "submit": "Sign In",
257
+ "forgotPassword": "Forgot password?",
258
+ "noAccount": "Don't have an account?",
259
+ "signUp": "Sign up"
260
+ },
261
+ "errors": {
262
+ "invalidCredentials": "Invalid email or password",
263
+ "accountLocked": "Account is locked",
264
+ "sessionExpired": "Your session has expired"
265
+ }
266
+ },
267
+
268
+ "settings": {
269
+ "title": "Settings",
270
+ "sections": {
271
+ "profile": "Profile Settings",
272
+ "security": "Security",
273
+ "notifications": "Notifications",
274
+ "billing": "Billing"
275
+ }
276
+ }
277
+ }
278
+ ```
279
+
280
+ **📋 Spanish Translation (es.json):**
281
+
282
+ ```json
283
+ {
284
+ "common": {
285
+ "buttons": {
286
+ "save": "Guardar",
287
+ "cancel": "Cancelar",
288
+ "delete": "Eliminar",
289
+ "edit": "Editar",
290
+ "create": "Crear",
291
+ "submit": "Enviar",
292
+ "back": "Volver"
293
+ },
294
+ "status": {
295
+ "loading": "Cargando...",
296
+ "saving": "Guardando...",
297
+ "success": "¡Éxito!",
298
+ "error": "Ocurrió un error"
299
+ }
300
+ },
301
+
302
+ "dashboard": {
303
+ "title": "Panel de Control",
304
+ "welcome": "¡Bienvenido, {name}!",
305
+ "sidebar": {
306
+ "home": "Inicio",
307
+ "settings": "Configuración",
308
+ "profile": "Perfil"
309
+ }
310
+ }
311
+ }
312
+ ```
313
+
314
+ ```
315
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
316
+
317
+ What would you like to do?
318
+
319
+ [1] Continue to Step 4 (Use in Code)
320
+ [2] How do I use variables in translations?
321
+ [3] How do I handle pluralization?
322
+ ```
323
+
324
+ ---
325
+
326
+ ## Step 4: Use Translations in Code
327
+
328
+ ```
329
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
330
+ STEP 4 OF 5: Use Translations in Code
331
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
332
+ ```
333
+
334
+ **📋 In Server Components:**
335
+
336
+ ```typescript
337
+ // app/[locale]/dashboard/page.tsx
338
+ import { getTranslations } from 'next-intl/server'
339
+
340
+ export default async function DashboardPage() {
341
+ const t = await getTranslations('dashboard')
342
+
343
+ return (
344
+ <div>
345
+ <h1>{t('title')}</h1>
346
+ <p>{t('welcome', { name: 'John' })}</p>
347
+ </div>
348
+ )
349
+ }
350
+ ```
351
+
352
+ **📋 In Client Components:**
353
+
354
+ ```typescript
355
+ 'use client'
356
+
357
+ import { useTranslations } from 'next-intl'
358
+
359
+ export function WelcomeCard({ userName }: { userName: string }) {
360
+ const t = useTranslations('dashboard')
361
+ const tCommon = useTranslations('common.buttons')
362
+
363
+ return (
364
+ <div>
365
+ <h2>{t('welcome', { name: userName })}</h2>
366
+ <button>{tCommon('save')}</button>
367
+ </div>
368
+ )
369
+ }
370
+ ```
371
+
372
+ **📋 With Variables (Interpolation):**
373
+
374
+ ```json
375
+ // messages/en.json
376
+ {
377
+ "items": {
378
+ "count": "You have {count} items",
379
+ "selected": "{count} of {total} selected"
380
+ }
381
+ }
382
+ ```
383
+
384
+ ```typescript
385
+ t('items.count', { count: 5 })
386
+ // "You have 5 items"
387
+
388
+ t('items.selected', { count: 3, total: 10 })
389
+ // "3 of 10 selected"
390
+ ```
391
+
392
+ **📋 With Pluralization:**
393
+
394
+ ```json
395
+ // messages/en.json
396
+ {
397
+ "cart": {
398
+ "items": "{count, plural, =0 {No items} =1 {1 item} other {# items}}"
399
+ }
400
+ }
401
+ ```
402
+
403
+ ```typescript
404
+ t('cart.items', { count: 0 }) // "No items"
405
+ t('cart.items', { count: 1 }) // "1 item"
406
+ t('cart.items', { count: 5 }) // "5 items"
407
+ ```
408
+
409
+ **📋 Change Language:**
410
+
411
+ ```typescript
412
+ 'use client'
413
+
414
+ import { useLocale } from 'next-intl'
415
+ import { useRouter, usePathname } from 'next/navigation'
416
+
417
+ export function LanguageSwitcher() {
418
+ const locale = useLocale()
419
+ const router = useRouter()
420
+ const pathname = usePathname()
421
+
422
+ const switchLocale = (newLocale: string) => {
423
+ // Replace locale in path
424
+ const newPath = pathname.replace(`/${locale}`, `/${newLocale}`)
425
+ router.push(newPath)
426
+ }
427
+
428
+ return (
429
+ <select value={locale} onChange={(e) => switchLocale(e.target.value)}>
430
+ <option value="en">English</option>
431
+ <option value="es">Español</option>
432
+ </select>
433
+ )
434
+ }
435
+ ```
436
+
437
+ ```
438
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
439
+
440
+ What would you like to do?
441
+
442
+ [1] Continue to Step 5 (Entity Translations)
443
+ [2] How do I format dates and numbers?
444
+ [3] Show me rich text translations
445
+ ```
446
+
447
+ ---
448
+
449
+ ## Step 5: Add Entity Translations
450
+
451
+ ```
452
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
453
+ STEP 5 OF 5: Add Entity Translations
454
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
455
+
456
+ Entities have their own translation files:
457
+ ```
458
+
459
+ **📂 Entity Messages Structure:**
460
+
461
+ ```
462
+ contents/themes/your-theme/entities/products/messages/
463
+ ├── en.json
464
+ └── es.json
465
+ ```
466
+
467
+ **📋 Entity Messages (en.json):**
468
+
469
+ ```json
470
+ {
471
+ "entities": {
472
+ "products": {
473
+ "name": "Product",
474
+ "namePlural": "Products",
475
+ "description": "Manage your product catalog",
476
+
477
+ "fields": {
478
+ "name": "Product Name",
479
+ "description": "Description",
480
+ "price": "Price",
481
+ "sku": "SKU Code",
482
+ "category": "Category",
483
+ "isActive": "Active"
484
+ },
485
+
486
+ "placeholders": {
487
+ "name": "Enter product name...",
488
+ "description": "Describe this product...",
489
+ "sku": "e.g., PROD-001"
490
+ },
491
+
492
+ "actions": {
493
+ "create": "Create Product",
494
+ "edit": "Edit Product",
495
+ "delete": "Delete Product",
496
+ "duplicate": "Duplicate Product"
497
+ },
498
+
499
+ "messages": {
500
+ "created": "Product created successfully",
501
+ "updated": "Product updated successfully",
502
+ "deleted": "Product deleted successfully",
503
+ "confirmDelete": "Are you sure you want to delete this product?",
504
+ "notFound": "Product not found"
505
+ },
506
+
507
+ "filters": {
508
+ "active": "Active products",
509
+ "inactive": "Inactive products",
510
+ "all": "All products"
511
+ }
512
+ }
513
+ }
514
+ }
515
+ ```
516
+
517
+ **📋 Entity Messages (es.json):**
518
+
519
+ ```json
520
+ {
521
+ "entities": {
522
+ "products": {
523
+ "name": "Producto",
524
+ "namePlural": "Productos",
525
+ "description": "Administra tu catálogo de productos",
526
+
527
+ "fields": {
528
+ "name": "Nombre del Producto",
529
+ "description": "Descripción",
530
+ "price": "Precio",
531
+ "sku": "Código SKU",
532
+ "category": "Categoría",
533
+ "isActive": "Activo"
534
+ },
535
+
536
+ "actions": {
537
+ "create": "Crear Producto",
538
+ "edit": "Editar Producto",
539
+ "delete": "Eliminar Producto"
540
+ },
541
+
542
+ "messages": {
543
+ "created": "Producto creado exitosamente",
544
+ "updated": "Producto actualizado exitosamente",
545
+ "deleted": "Producto eliminado exitosamente",
546
+ "confirmDelete": "¿Estás seguro de que deseas eliminar este producto?"
547
+ }
548
+ }
549
+ }
550
+ }
551
+ ```
552
+
553
+ **📋 Use in Entity Forms:**
554
+
555
+ ```typescript
556
+ // Entity config references i18n keys
557
+ export const productsEntity: EntityConfig = {
558
+ displayName: 'entities.products.name',
559
+ displayNamePlural: 'entities.products.namePlural',
560
+ fields: {
561
+ name: {
562
+ label: 'entities.products.fields.name',
563
+ placeholder: 'entities.products.placeholders.name',
564
+ },
565
+ // ...
566
+ },
567
+ }
568
+ ```
569
+
570
+ **📋 Rebuild Translation Registry:**
571
+
572
+ ```bash
573
+ node core/scripts/build/registry.mjs
574
+ ```
575
+
576
+ ```
577
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
578
+
579
+ ✅ TUTORIAL STORY!
580
+
581
+ You've configured:
582
+ • Supported languages in app config
583
+ • Theme message files
584
+ • Entity-specific translations
585
+ • Translation usage in components
586
+
587
+ 📚 Related tutorials:
588
+ • /how-to:create-entity - Create entities with i18n
589
+ • /how-to:customize-theme - Theme customization
590
+
591
+ 🔙 Back to menu: /how-to:start
592
+ ```
593
+
594
+ ---
595
+
596
+ ## Related Commands
597
+
598
+ | Command | Action |
599
+ |---------|--------|
600
+ | `/how-to:add-translations` | Add more translations |
601
+ | `/how-to:create-entity` | Entity with i18n |