Skip to content

feat: add i18n category with i18next and next-intl#147

Closed
Marve10s wants to merge 3 commits intomainfrom
feat/i18n-category
Closed

feat: add i18n category with i18next and next-intl#147
Marve10s wants to merge 3 commits intomainfrom
feat/i18n-category

Conversation

@Marve10s
Copy link
Copy Markdown
Owner

@Marve10s Marve10s commented Apr 9, 2026

Summary

  • Add internationalization (i18n) as a new TypeScript ecosystem category with two options: i18next (universal, works with all frontends) and next-intl (Next.js-specific)
  • Wire across ~37 files following the Scenario B new-category checklist: schemas, types, compatibility, CLI prompts, web builder, template handler, dep processor, templates, MCP, bts-config, constants, command-handlers, config-processing, reproducible-command, preview-config, stack-defaults/keys/state/utils, tech-icons, tech-resource-links, smoke test wiring
  • Add getDisabledReason() rule: next-intl is disabled when frontend is not Next.js

Scaffolding verification

4 combos scaffolded and type-checked:

Combo Frontend i18n Type-check
1 Next.js i18next PASS
2 TanStack Router i18next PASS
3 Next.js next-intl PASS
4 SvelteKit i18next PASS

Test plan

  • bun test apps/cli/test/cli-builder-sync.test.ts -- i18n wiring passes (pre-existing goOrm failure unrelated)
  • Scaffold combo with --i18n i18next and verify apps/web/src/i18n/config.ts + public/locales/ generated
  • Scaffold combo with --i18n next-intl --frontend next and verify apps/web/src/middleware.ts + messages/ generated
  • Verify next-intl is disabled in web builder when frontend is not Next.js
  • bun install && bun run check-types passes for all 4 combos

Add PythonGraphqlSchema with "strawberry" and "none" options. Wire through
all ~30 files: schemas, types, option-metadata, compatibility, CLI index/
prompts/mcp/bts-config/constants/command-handlers/config-processing/
generate-reproducible-command, web builder constant/preview-config/
stack-defaults/stack-url-keys/stack-url-state/stack-utils/tech-icons/
tech-resource-links, smoke test options/presets, and test updates.

Template changes: pyproject.toml.hbs adds framework-specific strawberry
extras (fastapi/flask/django/litestar), main.py.hbs mounts /graphql route
per framework, new graphql_schema.py.hbs with example Query/Mutation types,
test_main.py.hbs adds GraphQL hello query tests per framework.
…intl

Add i18n as a new TypeScript category supporting two options:
- i18next: Universal i18n framework for all frontends (22M+ weekly downloads)
- next-intl: Next.js-specific i18n with App Router support

Includes full checklist implementation: schema, types, compatibility rules,
CLI prompts, web builder, template handler, dep processor, templates, and
test/smoke wiring across ~37 files.

Compatibility: next-intl is disabled when frontend is not Next.js.
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 9, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
better-fullstack-web Ignored Ignored Preview Apr 10, 2026 10:20am

@github-actions github-actions bot added size:L 100-499 effective changed lines (test files excluded in mixed PRs). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Apr 9, 2026
…defaults

Remove two stray closing braces in BASE_LINKS that broke the object
literal after the i18n entries were added. Also add i18n to test-utils
coreStackFlags and coreStackDefaults so tests don't hang waiting for
the new i18n prompt.
@Marve10s
Copy link
Copy Markdown
Owner Author

Closing — contaminated with cross-PR commits. Will recreate.

@Marve10s Marve10s closed this Apr 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 effective changed lines (test files excluded in mixed PRs). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant