You've already forked AstralRinth
forked from didirus/AstralRinth
fix: fouc (#5012)
* fix: fouc * feat: lazy load locales * switch test to use build
This commit is contained in:
@@ -1,11 +1,4 @@
|
|||||||
import { buildLocaleMessages, createMessageCompiler, type CrowdinMessages } from '@modrinth/ui'
|
import { createMessageCompiler } from '@modrinth/ui'
|
||||||
|
|
||||||
const localeModules = import.meta.glob<{ default: CrowdinMessages }>(
|
|
||||||
'../src/locales/*/index.json',
|
|
||||||
{
|
|
||||||
eager: true,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
export default defineI18nConfig(() => ({
|
export default defineI18nConfig(() => ({
|
||||||
legacy: false,
|
legacy: false,
|
||||||
@@ -14,6 +7,4 @@ export default defineI18nConfig(() => ({
|
|||||||
messageCompiler: createMessageCompiler(),
|
messageCompiler: createMessageCompiler(),
|
||||||
missingWarn: false,
|
missingWarn: false,
|
||||||
fallbackWarn: false,
|
fallbackWarn: false,
|
||||||
// @ts-expect-error - buildLocaleMessages returns compatible format at runtime
|
|
||||||
messages: buildLocaleMessages(localeModules),
|
|
||||||
}))
|
}))
|
||||||
|
|||||||
17
apps/frontend/i18n/locale-loader.ts
Normal file
17
apps/frontend/i18n/locale-loader.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { type CrowdinMessages, transformCrowdinMessages } from '@modrinth/ui'
|
||||||
|
|
||||||
|
// eager:false - only loads the locale requested
|
||||||
|
const localeModules = import.meta.glob<{ default: CrowdinMessages }>(
|
||||||
|
'../src/locales/*/index.json',
|
||||||
|
{ eager: false },
|
||||||
|
)
|
||||||
|
|
||||||
|
export default defineI18nLocale(async (locale) => {
|
||||||
|
const loader = localeModules[`../src/locales/${locale}/index.json`]
|
||||||
|
if (!loader) {
|
||||||
|
console.warn(`Locale ${locale} not found`)
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
const messages = await loader()
|
||||||
|
return transformCrowdinMessages(messages.default)
|
||||||
|
})
|
||||||
@@ -225,8 +225,12 @@ export default defineNuxtConfig({
|
|||||||
},
|
},
|
||||||
i18n: {
|
i18n: {
|
||||||
defaultLocale: 'en-US',
|
defaultLocale: 'en-US',
|
||||||
// @ts-expect-error - LocaleDefinition is compatible at runtime
|
lazy: true,
|
||||||
locales: LOCALES,
|
langDir: '.',
|
||||||
|
locales: LOCALES.map((locale) => ({
|
||||||
|
...locale,
|
||||||
|
file: 'locale-loader.ts',
|
||||||
|
})),
|
||||||
strategy: 'no_prefix',
|
strategy: 'no_prefix',
|
||||||
detectBrowserLanguage: {
|
detectBrowserLanguage: {
|
||||||
useCookie: true,
|
useCookie: true,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "nuxi build",
|
"build": "NODE_OPTIONS=\"--max-old-space-size=8192\" nuxi build",
|
||||||
"dev": "nuxi dev",
|
"dev": "nuxi dev",
|
||||||
"generate": "nuxi generate",
|
"generate": "nuxi generate",
|
||||||
"preview": "nuxi preview",
|
"preview": "nuxi preview",
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
"lint": "eslint . && prettier --check .",
|
"lint": "eslint . && prettier --check .",
|
||||||
"fix": "eslint . --fix && prettier --write .",
|
"fix": "eslint . --fix && prettier --write .",
|
||||||
"intl:extract": "formatjs extract \"src/{components,composables,layouts,middleware,modules,pages,plugins,utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" \"src/error.vue\" --ignore \"**/*.d.ts\" --ignore node_modules --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace",
|
"intl:extract": "formatjs extract \"src/{components,composables,layouts,middleware,modules,pages,plugins,utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" \"src/error.vue\" --ignore \"**/*.d.ts\" --ignore node_modules --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace",
|
||||||
"test": "nuxi build"
|
"test": "pnpm build"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@formatjs/cli": "^6.2.12",
|
"@formatjs/cli": "^6.2.12",
|
||||||
|
|||||||
@@ -40,9 +40,6 @@
|
|||||||
"patchedDependencies": {
|
"patchedDependencies": {
|
||||||
"readable-stream@2.3.8": "patches/readable-stream@2.3.8.patch"
|
"readable-stream@2.3.8": "patches/readable-stream@2.3.8.patch"
|
||||||
},
|
},
|
||||||
"overrides": {
|
|
||||||
"vite": "npm:rolldown-vite@7.2.11"
|
|
||||||
},
|
|
||||||
"peerDependencyRules": {
|
"peerDependencyRules": {
|
||||||
"allowedVersions": {
|
"allowedVersions": {
|
||||||
"vite": "7",
|
"vite": "7",
|
||||||
|
|||||||
812
pnpm-lock.yaml
generated
812
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user