├── .gitignore ├── CHANGELOG.md ├── README.md ├── messages ├── de.json └── en.json ├── package.json ├── project.inlang ├── .gitignore ├── project_id └── settings.json ├── src ├── app.d.ts ├── app.html ├── hooks.js ├── hooks.server.js ├── lib │ ├── i18n.js │ └── ui │ │ ├── Header.svelte │ │ ├── LanguageSwitcher.svelte │ │ └── styles.css ├── params │ └── int.js └── routes │ ├── +error.svelte │ ├── +layout.server.js │ ├── +layout.svelte │ ├── +page.svelte │ ├── about │ └── +page.svelte │ ├── excluded │ └── +page.svelte │ ├── matchall │ └── page │ │ ├── +page.svelte │ │ └── subpage │ │ └── +page.svelte │ ├── redirect │ ├── +page.server.ts │ └── +page.svelte │ └── users │ └── [id] │ ├── +page.svelte │ └── edit │ ├── +page.server.ts │ └── +page.svelte ├── svelte.config.js ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | .svelte-kit 2 | build 3 | node_modules 4 | .vercel 5 | dist -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @inlang/paraglide-sveltekit-example 2 | 3 | ## 0.1.71 4 | 5 | ### Patch Changes 6 | 7 | - Updated dependencies [72b2f34] 8 | - Updated dependencies [82581f7] 9 | - @inlang/paraglide-sveltekit@0.11.0 10 | 11 | ## 0.1.70 12 | 13 | ### Patch Changes 14 | 15 | - @inlang/paraglide-sveltekit@0.10.10 16 | 17 | ## 0.1.69 18 | 19 | ### Patch Changes 20 | 21 | - Updated dependencies [cf4019d] 22 | - @inlang/paraglide-sveltekit@0.10.9 23 | 24 | ## 0.1.68 25 | 26 | ### Patch Changes 27 | 28 | - Updated dependencies [5ec62a4] 29 | - @inlang/paraglide-sveltekit@0.10.8 30 | 31 | ## 0.1.67 32 | 33 | ### Patch Changes 34 | 35 | - @inlang/paraglide-sveltekit@0.10.7 36 | 37 | ## 0.1.66 38 | 39 | ### Patch Changes 40 | 41 | - Updated dependencies [bcd894f] 42 | - @inlang/paraglide-sveltekit@0.10.6 43 | 44 | ## 0.1.65 45 | 46 | ### Patch Changes 47 | 48 | - @inlang/paraglide-sveltekit@0.10.5 49 | 50 | ## 0.1.64 51 | 52 | ### Patch Changes 53 | 54 | - @inlang/paraglide-sveltekit@0.10.4 55 | 56 | ## 0.1.63 57 | 58 | ### Patch Changes 59 | 60 | - @inlang/paraglide-sveltekit@0.10.3 61 | 62 | ## 0.1.62 63 | 64 | ### Patch Changes 65 | 66 | - Updated dependencies [b5d4a4c] 67 | - @inlang/paraglide-sveltekit@0.10.2 68 | 69 | ## 0.1.61 70 | 71 | ### Patch Changes 72 | 73 | - Updated dependencies [ecef103] 74 | - @inlang/paraglide-sveltekit@0.10.1 75 | 76 | ## 0.1.60 77 | 78 | ### Patch Changes 79 | 80 | - Updated dependencies [928742b] 81 | - @inlang/paraglide-sveltekit@0.10.0 82 | 83 | ## 0.1.59 84 | 85 | ### Patch Changes 86 | 87 | - @inlang/paraglide-sveltekit@0.9.7 88 | 89 | ## 0.1.58 90 | 91 | ### Patch Changes 92 | 93 | - Updated dependencies [1ea7b14] 94 | - @inlang/paraglide-sveltekit@0.9.6 95 | 96 | ## 0.1.57 97 | 98 | ### Patch Changes 99 | 100 | - Updated dependencies [08a1e3f] 101 | - @inlang/paraglide-sveltekit@0.9.5 102 | 103 | ## 0.1.56 104 | 105 | ### Patch Changes 106 | 107 | - @inlang/paraglide-sveltekit@0.9.4 108 | 109 | ## 0.1.55 110 | 111 | ### Patch Changes 112 | 113 | - Updated dependencies [def2d4e] 114 | - @inlang/paraglide-sveltekit@0.9.3 115 | 116 | ## 0.1.54 117 | 118 | ### Patch Changes 119 | 120 | - @inlang/paraglide-sveltekit@0.9.2 121 | 122 | ## 0.1.53 123 | 124 | ### Patch Changes 125 | 126 | - Updated dependencies [f0192d2] 127 | - Updated dependencies [255fd41] 128 | - @inlang/paraglide-sveltekit@0.9.1 129 | 130 | ## 0.1.52 131 | 132 | ### Patch Changes 133 | 134 | - Updated dependencies [6319391] 135 | - Updated dependencies [76e7f20] 136 | - Updated dependencies [8db2224] 137 | - @inlang/paraglide-sveltekit@0.9.0 138 | 139 | ## 0.1.51 140 | 141 | ### Patch Changes 142 | 143 | - @inlang/paraglide-sveltekit@0.8.7 144 | 145 | ## 0.1.50 146 | 147 | ### Patch Changes 148 | 149 | - @inlang/paraglide-sveltekit@0.8.6 150 | 151 | ## 0.1.49 152 | 153 | ### Patch Changes 154 | 155 | - @inlang/paraglide-sveltekit@0.8.5 156 | 157 | ## 0.1.48 158 | 159 | ### Patch Changes 160 | 161 | - @inlang/paraglide-sveltekit@0.8.4 162 | 163 | ## 0.1.47 164 | 165 | ### Patch Changes 166 | 167 | - @inlang/paraglide-sveltekit@0.8.3 168 | 169 | ## 0.1.46 170 | 171 | ### Patch Changes 172 | 173 | - @inlang/paraglide-sveltekit@0.8.2 174 | 175 | ## 0.1.45 176 | 177 | ### Patch Changes 178 | 179 | - Updated dependencies [fbac297] 180 | - @inlang/paraglide-sveltekit@0.8.1 181 | 182 | ## 0.1.44 183 | 184 | ### Patch Changes 185 | 186 | - Updated dependencies [75cf8fd] 187 | - Updated dependencies [0bf4d74] 188 | - Updated dependencies [a27b7a4] 189 | - @inlang/paraglide-sveltekit@0.8.0 190 | 191 | ## 0.1.43 192 | 193 | ### Patch Changes 194 | 195 | - Updated dependencies [3e9b863] 196 | - @inlang/paraglide-sveltekit@0.7.0 197 | 198 | ## 0.1.42 199 | 200 | ### Patch Changes 201 | 202 | - @inlang/paraglide-sveltekit@0.6.23 203 | 204 | ## 0.1.41 205 | 206 | ### Patch Changes 207 | 208 | - @inlang/paraglide-sveltekit@0.6.22 209 | 210 | ## 0.1.40 211 | 212 | ### Patch Changes 213 | 214 | - @inlang/paraglide-sveltekit@0.6.21 215 | 216 | ## 0.1.39 217 | 218 | ### Patch Changes 219 | 220 | - @inlang/paraglide-sveltekit@0.6.20 221 | 222 | ## 0.1.38 223 | 224 | ### Patch Changes 225 | 226 | - Updated dependencies [1e5320e] 227 | - @inlang/paraglide-sveltekit@0.6.19 228 | 229 | ## 0.1.37 230 | 231 | ### Patch Changes 232 | 233 | - @inlang/paraglide-sveltekit@0.6.18 234 | 235 | ## 0.1.36 236 | 237 | ### Patch Changes 238 | 239 | - @inlang/paraglide-sveltekit@0.6.17 240 | 241 | ## 0.1.35 242 | 243 | ### Patch Changes 244 | 245 | - @inlang/paraglide-sveltekit@0.6.16 246 | 247 | ## 0.1.34 248 | 249 | ### Patch Changes 250 | 251 | - @inlang/paraglide-sveltekit@0.6.15 252 | 253 | ## 0.1.33 254 | 255 | ### Patch Changes 256 | 257 | - Updated dependencies [419d8b6] 258 | - @inlang/paraglide-sveltekit@0.6.14 259 | 260 | ## 0.1.32 261 | 262 | ### Patch Changes 263 | 264 | - @inlang/paraglide-sveltekit@0.6.13 265 | 266 | ## 0.1.31 267 | 268 | ### Patch Changes 269 | 270 | - @inlang/paraglide-sveltekit@0.6.12 271 | 272 | ## 0.1.30 273 | 274 | ### Patch Changes 275 | 276 | - @inlang/paraglide-sveltekit@0.6.11 277 | 278 | ## 0.1.29 279 | 280 | ### Patch Changes 281 | 282 | - @inlang/paraglide-sveltekit@0.6.10 283 | 284 | ## 0.1.28 285 | 286 | ### Patch Changes 287 | 288 | - @inlang/paraglide-sveltekit@0.6.9 289 | 290 | ## 0.1.27 291 | 292 | ### Patch Changes 293 | 294 | - @inlang/paraglide-sveltekit@0.6.8 295 | 296 | ## 0.1.26 297 | 298 | ### Patch Changes 299 | 300 | - @inlang/paraglide-js-adapter-sveltekit@0.6.7 301 | 302 | ## 0.1.25 303 | 304 | ### Patch Changes 305 | 306 | - Updated dependencies [cee4692] 307 | - Updated dependencies [4b631aa] 308 | - @inlang/paraglide-js-adapter-sveltekit@0.6.6 309 | 310 | ## 0.1.24 311 | 312 | ### Patch Changes 313 | 314 | - @inlang/paraglide-js-adapter-sveltekit@0.6.5 315 | 316 | ## 0.1.23 317 | 318 | ### Patch Changes 319 | 320 | - @inlang/paraglide-js-adapter-sveltekit@0.6.4 321 | 322 | ## 0.1.22 323 | 324 | ### Patch Changes 325 | 326 | - @inlang/paraglide-js-adapter-sveltekit@0.6.3 327 | 328 | ## 0.1.21 329 | 330 | ### Patch Changes 331 | 332 | - Updated dependencies [cdbb415] 333 | - @inlang/paraglide-js-adapter-sveltekit@0.6.2 334 | 335 | ## 0.1.20 336 | 337 | ### Patch Changes 338 | 339 | - Updated dependencies [a4d4e10] 340 | - @inlang/paraglide-js-adapter-sveltekit@0.6.1 341 | 342 | ## 0.1.19 343 | 344 | ### Patch Changes 345 | 346 | - Updated dependencies [1642873] 347 | - Updated dependencies [690656e] 348 | - Updated dependencies [ce0b961] 349 | - @inlang/paraglide-js-adapter-sveltekit@0.6.0 350 | 351 | ## 0.1.18 352 | 353 | ### Patch Changes 354 | 355 | - @inlang/paraglide-js-adapter-sveltekit@0.5.22 356 | 357 | ## 0.1.17 358 | 359 | ### Patch Changes 360 | 361 | - @inlang/paraglide-js-adapter-sveltekit@0.5.21 362 | 363 | ## 0.1.16 364 | 365 | ### Patch Changes 366 | 367 | - @inlang/paraglide-js-adapter-sveltekit@0.5.20 368 | 369 | ## 0.1.15 370 | 371 | ### Patch Changes 372 | 373 | - @inlang/paraglide-js-adapter-sveltekit@0.5.19 374 | 375 | ## 0.1.14 376 | 377 | ### Patch Changes 378 | 379 | - @inlang/paraglide-js-adapter-sveltekit@0.5.18 380 | 381 | ## 0.1.13 382 | 383 | ### Patch Changes 384 | 385 | - @inlang/paraglide-js-adapter-sveltekit@0.5.17 386 | 387 | ## 0.1.12 388 | 389 | ### Patch Changes 390 | 391 | - @inlang/paraglide-js-adapter-sveltekit@0.5.16 392 | 393 | ## 0.1.11 394 | 395 | ### Patch Changes 396 | 397 | - @inlang/paraglide-js-adapter-sveltekit@0.5.15 398 | 399 | ## 0.1.10 400 | 401 | ### Patch Changes 402 | 403 | - Updated dependencies [d052495] 404 | - @inlang/paraglide-js-adapter-sveltekit@0.5.14 405 | 406 | ## 0.1.9 407 | 408 | ### Patch Changes 409 | 410 | - @inlang/paraglide-js-adapter-sveltekit@0.5.13 411 | 412 | ## 0.1.8 413 | 414 | ### Patch Changes 415 | 416 | - @inlang/paraglide-js-adapter-sveltekit@0.5.12 417 | 418 | ## 0.1.7 419 | 420 | ### Patch Changes 421 | 422 | - Updated dependencies [ef4e0ab] 423 | - @inlang/paraglide-js-adapter-sveltekit@0.5.11 424 | 425 | ## 0.1.6 426 | 427 | ### Patch Changes 428 | 429 | - @inlang/paraglide-js-adapter-sveltekit@0.5.10 430 | 431 | ## 0.1.5 432 | 433 | ### Patch Changes 434 | 435 | - @inlang/paraglide-js-adapter-sveltekit@0.5.9 436 | 437 | ## 0.1.4 438 | 439 | ### Patch Changes 440 | 441 | - Updated dependencies [62e4a5c] 442 | - @inlang/paraglide-js-adapter-sveltekit@0.5.8 443 | 444 | ## 0.1.3 445 | 446 | ### Patch Changes 447 | 448 | - @inlang/paraglide-js-adapter-sveltekit@0.5.7 449 | 450 | ## 0.1.2 451 | 452 | ### Patch Changes 453 | 454 | - Updated dependencies [bce060367] 455 | - @inlang/paraglide-js-adapter-sveltekit@0.5.6 456 | 457 | ## 0.1.1 458 | 459 | ### Patch Changes 460 | 461 | - @inlang/paraglide-js-adapter-sveltekit@0.5.5 462 | 463 | ## 0.1.0 464 | 465 | ### Minor Changes 466 | 467 | - dc42da6e6: redesign 468 | 469 | ## 0.0.15 470 | 471 | ### Patch Changes 472 | 473 | - Updated dependencies [5d25b889a] 474 | - @inlang/paraglide-js-adapter-sveltekit@0.5.4 475 | 476 | ## 0.0.14 477 | 478 | ### Patch Changes 479 | 480 | - Updated dependencies [726690acb] 481 | - @inlang/paraglide-js-adapter-sveltekit@0.5.3 482 | 483 | ## 0.0.13 484 | 485 | ### Patch Changes 486 | 487 | - @inlang/paraglide-js-adapter-sveltekit@0.5.2 488 | 489 | ## 0.0.12 490 | 491 | ### Patch Changes 492 | 493 | - Updated dependencies [a7b593e9a] 494 | - @inlang/paraglide-js-adapter-sveltekit@0.5.1 495 | 496 | ## 0.0.11 497 | 498 | - Update Inlang Modules 499 | 500 | ## 0.0.10 501 | 502 | - Add `start` command for StackBlitz 503 | - Remove `/base` path 504 | 505 | ## 0.0.9 506 | 507 | ### Patch Changes 508 | 509 | - Updated dependencies [7f566ae73] 510 | - Updated dependencies [e4e879c77] 511 | - Updated dependencies [21a3890cc] 512 | - Updated dependencies [37a247c0e] 513 | - Updated dependencies [37a247c0e] 514 | - @inlang/paraglide-js-adapter-sveltekit@0.5.0 515 | 516 | ## 0.0.8 517 | 518 | ### Patch Changes 519 | 520 | - @inlang/paraglide-js-adapter-sveltekit@0.4.1 521 | 522 | ## 0.0.7 523 | 524 | ### Patch Changes 525 | 526 | - Updated dependencies [45f5d8256] 527 | - @inlang/paraglide-js-adapter-sveltekit@0.4.0 528 | 529 | ## 0.0.6 530 | 531 | ### Patch Changes 532 | 533 | - @inlang/paraglide-js-adapter-sveltekit@0.3.7 534 | 535 | ## 0.0.5 536 | 537 | ### Patch Changes 538 | 539 | - @inlang/paraglide-js-adapter-sveltekit@0.3.6 540 | 541 | ## 0.0.4 542 | 543 | ### Patch Changes 544 | 545 | - Updated dependencies [eaef718ee] 546 | - @inlang/paraglide-js-adapter-sveltekit@0.3.5 547 | 548 | ## 0.0.3 549 | 550 | ### Patch Changes 551 | 552 | - Updated dependencies [3aa1b6ca3] 553 | - @inlang/paraglide-js-adapter-sveltekit@0.3.4 554 | 555 | ## 0.0.2 556 | 557 | ### Patch Changes 558 | 559 | - Updated dependencies [0efbc35c5] 560 | - @inlang/paraglide-js-adapter-sveltekit@0.3.3 561 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Paraglide Example with SvelteKit 2 | 3 | This is an example Project for using Paraglide with SvelteKit. It implements i18n routing with translated routes and is ready for SSR, SSG and CSR. Everything you need to get started. 4 | 5 | Use this as a reference for your own project. 6 | 7 | ## Links 8 | - [Paraglide](https://inlang.com/m/gerre34r/library-inlang-paraglideJs) 9 | - [Paraglide-SvelteKit](https://inlang.com/m/dxnzrydw/paraglide-sveltekit-i18n) 10 | 11 | ## Interesting Files 12 | - `vite.config.js` 13 | - `src/lib/i18n.js` 14 | - `src/routes/+layout.svelte` 15 | - `src/hooks.js` 16 | - `src/hooks.server.js` -------------------------------------------------------------------------------- /messages/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://inlang.com/schema/inlang-message-format", 3 | "about": "Über uns", 4 | "home": "Startseite", 5 | "users": "Benutzer", 6 | "next_user": "Nächster Benutzer", 7 | "previous_user": "Vorheriger Benutzer", 8 | "about_path": "/ueber-uns", 9 | 10 | "edit_user": "Benutzer {userId} bearbeiten", 11 | 12 | "paraglide_and_next_app_router": "ParaglideJS + SvelteKit", 13 | "this_app_was_localised_with_paraglide": "Dies ist eine SvelteKit App die mit Paraglide-Next lokalisiert wurde.", 14 | "switch_languages_in_top_right": "Sie können die Sprache oben rechts ändern", 15 | "learn_more_at_following_links": "Erfahren sie mehr über Paraglide und SvelteKit mit den folgenden Links:", 16 | "paraglide_documentation": "Paraglide Dokumentation", 17 | "source_code": "Quell-Code" 18 | } -------------------------------------------------------------------------------- /messages/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://inlang.com/schema/inlang-message-format", 3 | "about": "About", 4 | "home": "Home", 5 | "users": "Users", 6 | "next_user": "Next user", 7 | "previous_user": "Previous user", 8 | "about_path": "/about", 9 | 10 | "edit_user": "Edit user {userId}", 11 | 12 | "paraglide_and_next_app_router": "ParaglideJS + SvelteKit", 13 | "this_app_was_localised_with_paraglide": "This is a SvelteKit App that was localised using Paraglide-Next.", 14 | "switch_languages_in_top_right": "You can switch languages in the top right corner.", 15 | "learn_more_at_following_links": "Learn more at the following links", 16 | "paraglide_documentation": "Paraglide Documentation", 17 | "source_code": "Source Code" 18 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@inlang/paraglide-sveltekit-example", 3 | "version": "0.1.71", 4 | "private": true, 5 | "dependencies": { 6 | "@inlang/paraglide-sveltekit": "0.11.0" 7 | }, 8 | "devDependencies": { 9 | "@sveltejs/adapter-node": "^5.0.1", 10 | "@sveltejs/adapter-static": "^3.0.0", 11 | "@sveltejs/kit": "^2.5.17", 12 | "@sveltejs/vite-plugin-svelte": "^3.0.2", 13 | "rollup-plugin-visualizer": "^5.12.0", 14 | "svelte": "^4.2.7", 15 | "svelte-check": "^3.6.9", 16 | "vite": "^5.2.6", 17 | "@inlang/paraglide-js": "1.11.2" 18 | }, 19 | "files": [ 20 | "*", 21 | ".gitignore" 22 | ], 23 | "type": "module", 24 | "scripts": { 25 | "_dev": "vite dev", 26 | "start": "vite dev", 27 | "build": "vite build && tsc --noEmit", 28 | "test": "vite build", 29 | "preview": "vite preview", 30 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 31 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" 32 | } 33 | } -------------------------------------------------------------------------------- /project.inlang/.gitignore: -------------------------------------------------------------------------------- 1 | cache -------------------------------------------------------------------------------- /project.inlang/project_id: -------------------------------------------------------------------------------- 1 | 8f4dfba4f8f727add96068fcf8c5a8983e9896fa4eb9680dfd5d60468b2670f5 2 | -------------------------------------------------------------------------------- /project.inlang/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://inlang.com/schema/project-settings", 3 | "sourceLanguageTag": "en", 4 | "languageTags": ["en", "de"], 5 | "modules": [ 6 | "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@latest/dist/index.js", 7 | "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-identical-pattern@latest/dist/index.js", 8 | "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-missing-translation@latest/dist/index.js", 9 | "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-without-source@latest/dist/index.js", 10 | "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-valid-js-identifier@latest/dist/index.js", 11 | "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@latest/dist/index.js", 12 | "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@latest/dist/index.js" 13 | ], 14 | "plugin.inlang.messageFormat": { 15 | "pathPattern": "./messages/{languageTag}.json" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | import type { AvailableLanguageTag } from "$lib/paraglide/runtime" 2 | import type { ParaglideLocals } from "@inlang/paraglide-sveltekit" 3 | 4 | // See https://kit.svelte.dev/docs/types#app 5 | // for information about these interfaces 6 | declare global { 7 | namespace App { 8 | // interface Error {} 9 | interface Locals { 10 | paraglide: ParaglideLocals 11 | } 12 | // interface PageData {} 13 | // interface Platform {} 14 | } 15 | } 16 | 17 | export {} 18 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/hooks.js: -------------------------------------------------------------------------------- 1 | import { i18n } from "$lib/i18n" 2 | 3 | /** @type {import("@sveltejs/kit").Reroute} */ 4 | export const reroute = i18n.reroute() 5 | -------------------------------------------------------------------------------- /src/hooks.server.js: -------------------------------------------------------------------------------- 1 | import { i18n } from "$lib/i18n" 2 | 3 | export const handle = i18n.handle() 4 | -------------------------------------------------------------------------------- /src/lib/i18n.js: -------------------------------------------------------------------------------- 1 | import { createI18n } from "@inlang/paraglide-sveltekit" 2 | import { match as int } from "../params/int" 3 | import * as runtime from "$lib/paraglide/runtime.js" 4 | import * as m from "$lib/paraglide/messages.js" 5 | import { base } from "$app/paths" 6 | 7 | export const i18n = createI18n(runtime, { 8 | pathnames: { 9 | "/about": m.about_path, 10 | "/users": { 11 | en: "/users", 12 | de: "/benutzer", 13 | }, 14 | "/users/[id=int]/[...rest]": { 15 | en: "/users/[id=int]/[...rest]", 16 | de: "/benutzer/[id=int]/[...rest]", 17 | }, 18 | }, 19 | matchers: { int }, 20 | prefixDefaultLanguage: "always", 21 | exclude: [base + "/not-translated", base + "/excluded"], 22 | textDirection: { 23 | en: "ltr", 24 | de: "ltr", 25 | }, 26 | }) 27 | -------------------------------------------------------------------------------- /src/lib/ui/Header.svelte: -------------------------------------------------------------------------------- 1 | 7 |
8 | 13 | {$page.url.pathname} 14 | 15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /src/lib/ui/LanguageSwitcher.svelte: -------------------------------------------------------------------------------- 1 | 25 | 26 | -------------------------------------------------------------------------------- /src/lib/ui/styles.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | min-width: 0; 4 | } 5 | 6 | :root { 7 | font-size: 16px; 8 | } 9 | 10 | html, body { 11 | margin: 0; 12 | padding: 0; 13 | font-family: 'Roboto', sans-serif; 14 | line-height: 1.5; 15 | font-size: 1rem; 16 | color: #111; 17 | background-color: #fefefe; 18 | } 19 | 20 | a { 21 | text-decoration: none; 22 | color: inherit; 23 | } 24 | 25 | .container { 26 | max-width: 800px; 27 | margin-inline: auto; 28 | margin-block-start: 5rem; 29 | padding: 0 20px; 30 | } 31 | 32 | .code-block { 33 | display: block; 34 | background-color: #f4f4f4; 35 | padding: 20px; 36 | border-radius: 5px; 37 | } -------------------------------------------------------------------------------- /src/params/int.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} param 3 | * @returns {param is number} 4 | */ 5 | export function match(param) { 6 | try { 7 | const parsed = parseFloat(param) 8 | if (isNaN(parsed)) return false 9 | 10 | 11 | //if it's an integer 12 | return parsed === Math.round(parsed) 13 | } catch (e) { 14 | return false 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/routes/+error.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 |

{$page.error?.message}

9 |
-------------------------------------------------------------------------------- /src/routes/+layout.server.js: -------------------------------------------------------------------------------- 1 | import { languageTag } from "$lib/paraglide/runtime" 2 | 3 | export const prerender = true 4 | export const trailingSlash = "always" 5 | 6 | /** 7 | * @type { import("./$types").LayoutServerLoad} 8 | */ 9 | export function load({ depends }) { 10 | // This tells SvelteKit to re-run this load function when the language changes 11 | depends("paraglide:lang") 12 | 13 | return { 14 | serverLang: `The language on the server is ${languageTag()}`, 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 |
10 | 11 |
12 | 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 |

{m.paraglide_and_next_app_router()}

7 |

{m.this_app_was_localised_with_paraglide()}

8 |

{m.switch_languages_in_top_right()}

9 |

{m.learn_more_at_following_links()}

10 | -------------------------------------------------------------------------------- /src/routes/about/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |

{m.about()}

6 | 7 | 8 |

9 | Lorem ipsum dolor sit amet, consectetur adipiscing elit sed do eiusmod tempor 10 | incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis 11 | nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 12 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore 13 | eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt 14 | in culpa qui officia deserunt mollit anim id est laborum. 15 |

-------------------------------------------------------------------------------- /src/routes/excluded/+page.svelte: -------------------------------------------------------------------------------- 1 |

This page should not be translated

-------------------------------------------------------------------------------- /src/routes/matchall/page/+page.svelte: -------------------------------------------------------------------------------- 1 | 6 |

Page

7 | 8 | Subpage 9 | Home -------------------------------------------------------------------------------- /src/routes/matchall/page/subpage/+page.svelte: -------------------------------------------------------------------------------- 1 | 6 |

Subpage

7 | 8 | Admin Page 9 | Home -------------------------------------------------------------------------------- /src/routes/redirect/+page.server.ts: -------------------------------------------------------------------------------- 1 | import { redirect } from "@sveltejs/kit" 2 | 3 | export const prerender = false 4 | 5 | export const actions = { 6 | redirect: async () => { 7 | redirect(303, "/?redirected=true") 8 | }, 9 | } 10 | -------------------------------------------------------------------------------- /src/routes/redirect/+page.svelte: -------------------------------------------------------------------------------- 1 |
2 | 3 |
-------------------------------------------------------------------------------- /src/routes/users/[id]/+page.svelte: -------------------------------------------------------------------------------- 1 | 13 | 14 |

{m.users()} {num_users}

15 | 16 | {m.previous_user()} 17 |
18 | {m.next_user()} 19 | 20 |
21 |
22 | 23 | {m.edit_user({ userId: num_users })} -------------------------------------------------------------------------------- /src/routes/users/[id]/edit/+page.server.ts: -------------------------------------------------------------------------------- 1 | import { languageTag } from "$lib/paraglide/runtime" 2 | import type { Actions } from "./$types" 3 | 4 | export const prerender = false 5 | 6 | export const actions: Actions = { 7 | create: async () => { 8 | console.info("create", languageTag()) 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/users/[id]/edit/+page.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 |

{m.edit_user({ userId })}

11 | {m.users()} 12 | 13 |
14 | 15 | 16 |
-------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from "@sveltejs/adapter-node" 2 | import { vitePreprocess } from "@sveltejs/vite-plugin-svelte" 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | preprocess: [vitePreprocess()], 7 | kit: { 8 | adapter: adapter(), 9 | prerender: { 10 | //Needed for correctly prerendering 11 | origin: "https://github.io", 12 | }, 13 | paths: { 14 | base: "/paraglide-sveltekit/example", 15 | }, 16 | }, 17 | 18 | extensions: [".svelte", ".svx"], 19 | } 20 | 21 | export default config 22 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from "@sveltejs/kit/vite" 2 | import { paraglide } from "@inlang/paraglide-sveltekit/vite" 3 | import { visualizer } from "rollup-plugin-visualizer" 4 | import { defineConfig } from "vite" 5 | 6 | export default defineConfig({ 7 | plugins: [ 8 | paraglide({ 9 | project: "./project.inlang", 10 | outdir: "./src/lib/paraglide", 11 | }), 12 | sveltekit(), 13 | visualizer({ 14 | filename: "stats.html", 15 | emitFile: true, 16 | }), 17 | ], 18 | }) 19 | --------------------------------------------------------------------------------