@better-i18n/next 0.3.0 → 0.4.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.ts +44 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-i18n/next",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Better-i18n Next.js integration",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/index.ts CHANGED
@@ -9,6 +9,7 @@ import {
9
9
  createI18nProxy,
10
10
  createBetterI18nMiddleware,
11
11
  composeMiddleware,
12
+ type MiddlewareCallback,
12
13
  } from "./middleware";
13
14
 
14
15
  /**
@@ -22,13 +23,21 @@ import {
22
23
  * export const i18n = createI18n({
23
24
  * project: 'acme/dashboard',
24
25
  * defaultLocale: 'en',
26
+ * localePrefix: 'always',
25
27
  * })
26
28
  *
27
29
  * // i18n/request.ts
28
30
  * export default i18n.requestConfig
29
31
  *
30
- * // middleware.ts
32
+ * // middleware.ts (simple)
31
33
  * export default i18n.middleware
34
+ *
35
+ * // middleware.ts (with auth - Clerk-style)
36
+ * export default i18n.betterMiddleware(async (request, { locale }) => {
37
+ * if (needsLogin) {
38
+ * return NextResponse.redirect(new URL(`/${locale}/login`, request.url));
39
+ * }
40
+ * });
32
41
  * ```
33
42
  */
34
43
  export const createI18n = (config: I18nConfig) => {
@@ -38,11 +47,45 @@ export const createI18n = (config: I18nConfig) => {
38
47
  return {
39
48
  config: normalized,
40
49
  requestConfig: createNextIntlRequestConfig(normalized),
50
+ /** @deprecated Use betterMiddleware() for Clerk-style callback support */
41
51
  middleware: createI18nMiddleware(normalized),
42
52
  proxy: createI18nProxy(normalized),
43
53
  getManifest: i18n.getManifest,
44
54
  getLocales: i18n.getLocales,
45
55
  getMessages: i18n.getMessages,
56
+
57
+ /**
58
+ * Create middleware with optional Clerk-style callback for auth integration
59
+ *
60
+ * @example Simple usage
61
+ * ```ts
62
+ * export default i18n.betterMiddleware();
63
+ * ```
64
+ *
65
+ * @example With auth callback
66
+ * ```ts
67
+ * export default i18n.betterMiddleware(async (request, { locale, response }) => {
68
+ * if (needsLogin) {
69
+ * return NextResponse.redirect(new URL(`/${locale}/login`, request.url));
70
+ * }
71
+ * // Return nothing = i18n response is used (headers preserved!)
72
+ * });
73
+ * ```
74
+ */
75
+ betterMiddleware: (callback?: MiddlewareCallback) => {
76
+ return createBetterI18nMiddleware(
77
+ {
78
+ project: normalized.project,
79
+ defaultLocale: normalized.defaultLocale,
80
+ localePrefix: normalized.localePrefix,
81
+ detection: {
82
+ cookie: true,
83
+ browserLanguage: true,
84
+ },
85
+ },
86
+ callback
87
+ );
88
+ },
46
89
  };
47
90
  };
48
91