#Manual Setup
The recommended way to set up paraglide-sveltekit
is to use the init
cli. However, we stil maintain a manual setup page in case the auotmated setup fails or cannot be used for some reason.
#1. Install dependencies
Install ParaglideJS and Paraglide-SvelteKit.
npx @inlang/paraglide-js init npm i -D @inlang/paraglide-sveltekit
This will generate a messages/{lang}.json
file for each of your languages. This is where your translation files live.
#2. Add the Vite Plugin
Add the vite-plugin to your vite.config.js
file. This will make sure to rerun the paraglide compiler when needed and add the link preprocessor.
// vite.config.js
import { paraglide } from "@inlang/paraglide-sveltekit/vite"
export default defineConfig({
plugins: [
paraglide({
//recommended
project: "./project.inlang",
outdir: "./src/lib/paraglide",
}),
sveltekit(),
],
})
#3. Initialise Paraglide-SvelteKit
Create a src/lib/i18n.js
file:
// src/lib/i18n.js
import { createI18n } from "@inlang/paraglide-sveltekit"
import * as runtime from "$lib/paraglide/runtime.js"
export const i18n = createI18n(runtime);
createI18n
will be your one-stop shop for configuring i18n routing.
#4. Add the Language Provider to your Layout
Add the ParaglideJS
component to your layout and pass it the i18n
instance.
If you're using Svelte 4 do it like so:
<!-- src/routes/+layout.svelte --> <script> import { ParaglideJS } from '@inlang/paraglide-sveltekit' import { i18n } from '$lib/i18n.js' </script> <ParaglideJS {i18n}> <slot /> </ParaglideJS>
or if you're using Svelte 5:
<!-- src/routes/+layout.svelte --> <script> import { ParaglideJS } from '@inlang/paraglide-sveltekit' import { i18n } from '$lib/i18n.js' const { children } = $props() </script> <ParaglideJS {i18n}> {@render children} </ParaglideJS>
#5. Add the Hooks
In your src/hooks.js
file, use the i18n
instance to add the reroute
hook:
// src/hooks.js
import { i18n } from '$lib/i18n.js'
export const reroute = i18n.reroute()
The reroute hook was added in SvelteKit 2.3.0
In src/hooks.server.js
add the handle hook.
// src/hooks.server.js
import { i18n } from '$lib/i18n.js'
export const handle = i18n.handle()
This will make the language and text-direction on event.locals.paraglide
.
To set the lang
and dir
attributes on your <html>
tag add placeholders in src/app.html
. These placeholders will be replaced by the handle
hook.
<!-- src/app.html -->
<html lang="%paraglide.lang%" dir="%paraglide.textDirection%">
#6. Add Types for event.locals.paraglide
In src/app.d.ts
// src/app.d.ts
import type { AvailableLanguageTag } from "$lib/paraglide/runtime"
import type { ParaglideLocals } from "@inlang/paraglide-sveltekit"
declare global {
namespace App {
interface Locals {
paraglide: ParaglideLocals<AvailableLanguageTag>
}
// ...
}
}
export {}
#Go try it out!
Visit /
to see your default language, and /{lang}
to see other languages. All links should be translated automatically.