|
1 | | -import { defineNuxtModule, createResolver, addPlugin, extendViteConfig, useLogger, addServerHandler, addTemplate, addVitePlugin } from '@nuxt/kit' |
| 1 | +import { defineNuxtModule, createResolver, addPlugin, extendViteConfig, useLogger, addServerHandler, addTemplate } from '@nuxt/kit' |
2 | 2 | import { createHash } from 'node:crypto' |
3 | 3 | import { defu } from 'defu' |
4 | | -import { resolve, basename } from 'node:path' |
5 | | -import { promises as fsp } from 'node:fs' |
6 | | -import { globby } from 'globby' |
| 4 | +import { resolve } from 'node:path' |
7 | 5 | import fsDriver from 'unstorage/drivers/fs' |
8 | 6 | import { createStorage } from 'unstorage' |
9 | | -import type { Plugin } from 'vite' |
10 | 7 | import { getAssetsStorageDevTemplate, getAssetsStorageTemplate } from './templates' |
11 | 8 | import { version } from '../../../package.json' |
12 | 9 | import { setupDevMode } from './dev' |
| 10 | +import { setupI18n } from './i18n' |
13 | 11 |
|
14 | 12 | interface ModuleOptions { |
15 | 13 | /** |
@@ -135,71 +133,6 @@ export default defineNuxtModule<ModuleOptions>({ |
135 | 133 | const resolver = createResolver(import.meta.url) |
136 | 134 | const runtime = (...args: string[]) => resolver.resolve('./runtime', ...args) |
137 | 135 |
|
138 | | - const defaultLocalesPath = resolver.resolve('../../app/src/locales') |
139 | | - const defaultLocaleFiles = await globby(`${defaultLocalesPath}/*.json`) |
140 | | - const defaultMessages: Record<string, unknown> = {} |
141 | | - for (const file of defaultLocaleFiles) { |
142 | | - const lang = basename(file, '.json') |
143 | | - defaultMessages[lang] = JSON.parse(await fsp.readFile(file, 'utf-8')) |
144 | | - } |
145 | | - |
146 | | - const userLocalesPath = resolve(nuxt.options.srcDir, 'locales/studio') |
147 | | - const userLocaleFiles = await globby(`${userLocalesPath}/*.json`) |
148 | | - const userMessages: Record<string, unknown> = {} |
149 | | - for (const file of userLocaleFiles) { |
150 | | - const lang = basename(file, '.json') |
151 | | - userMessages[lang] = JSON.parse(await fsp.readFile(file, 'utf-8')) |
152 | | - } |
153 | | - |
154 | | - const optionsMessages = options.i18n?.translations || {} |
155 | | - // @ts-expect-error - nuxt.options.appConfig.studio is not fully typed |
156 | | - const appConfigMessages = nuxt.options.appConfig.studio?.i18n?.translations || {} |
157 | | - |
158 | | - const finalMessages = defu( |
159 | | - optionsMessages, // 1. Highest priority (nuxt.config options) |
160 | | - appConfigMessages, // 2. Priority (app.config) |
161 | | - userMessages, // 3. Priority (locales/studio folder) |
162 | | - defaultMessages, // 4. Default translations (module) |
163 | | - ) |
164 | | - |
165 | | - // --- VITE PLUGIN --- |
166 | | - const virtualModuleName = 'virtual:studio-i18n-messages' |
167 | | - const resolvedVirtualModuleId = '\0' + virtualModuleName |
168 | | - |
169 | | - addVitePlugin({ |
170 | | - name: 'nuxt-studio-i18n-virtual-module', |
171 | | - resolveId(id) { |
172 | | - if (id === virtualModuleName) { |
173 | | - return resolvedVirtualModuleId |
174 | | - } |
175 | | - }, |
176 | | - load(id) { |
177 | | - if (id === resolvedVirtualModuleId) { |
178 | | - return `export default ${JSON.stringify(finalMessages)}` |
179 | | - } |
180 | | - }, |
181 | | - } as Plugin) |
182 | | - |
183 | | - addTemplate({ |
184 | | - filename: 'studio-i18n-plugin.client.mjs', |
185 | | - getContents: () => { |
186 | | - const defaultLocale = options.i18n?.defaultLocale || 'en' |
187 | | - |
188 | | - return ` |
189 | | - import messages from 'virtual:studio-i18n-messages' |
190 | | -
|
191 | | - export default defineNuxtPlugin(() => { |
192 | | - // @ts-ignore |
193 | | - window.__NUXT_STUDIO_I18N_MESSAGES__ = messages |
194 | | - // @ts-ignore |
195 | | - window.__NUXT_STUDIO_DEFAULT_LOCALE__ = '${defaultLocale}' |
196 | | - }) |
197 | | - ` |
198 | | - }, |
199 | | - }) |
200 | | - |
201 | | - addPlugin(resolve(nuxt.options.buildDir, 'studio-i18n-plugin.client.mjs')) |
202 | | - |
203 | 136 | if (nuxt.options.dev === false || options.development?.sync === false) { |
204 | 137 | options.dev = false |
205 | 138 | } |
@@ -279,6 +212,8 @@ export default defineNuxtModule<ModuleOptions>({ |
279 | 212 | : getAssetsStorageTemplate(assetsStorage, nuxt), |
280 | 213 | }) |
281 | 214 |
|
| 215 | + await setupI18n(nuxt, options.i18n!) |
| 216 | + |
282 | 217 | if (options.dev) { |
283 | 218 | setupDevMode(nuxt, runtime, assetsStorage) |
284 | 219 | } |
|
0 commit comments