70 lines
3.6 KiB
Markdown
70 lines
3.6 KiB
Markdown
# TriliumNext Notes — Korean (한국어) Translation
|
|
|
|
Unofficial, community-made Korean translation for [TriliumNext Notes](https://github.com/TriliumNext/Notes).
|
|
As of this writing, TriliumNext ships with no Korean language pack, and the list of
|
|
selectable UI languages is hardcoded into the compiled server bundle rather than
|
|
derived from the `translations/` folder — so dropping these files in alone is not
|
|
enough to make "한국어" show up in the language picker. See below for the full setup.
|
|
|
|
- `translation.json` — client-side UI strings, 1,712 keys, 100% translated.
|
|
- `server.json` — server-side strings, 283 keys, 100% translated.
|
|
- `patch_main_cjs.js` — patches the compiled `main.cjs` server bundle to register
|
|
`ko` as a selectable language (see comments in the script for why this is needed).
|
|
|
|
Tested against `triliumnext/notes:latest` (build date 2025-06-07, appVersion 0.95.0).
|
|
Variable names inside `main.cjs` are minified and **not stable across builds** — if
|
|
`patch_main_cjs.js` prints `[skip]` on a newer image, the markers it searches for
|
|
have changed and need to be re-derived from that build.
|
|
|
|
## Setup
|
|
|
|
1. Copy the translation files into the running container (or better, bind-mount them
|
|
so they survive `docker compose down && up` — see "Important" below):
|
|
- `translation.json` → `/usr/src/app/public/translations/ko/translation.json`
|
|
- `server.json` → `/usr/src/app/assets/translations/ko/server.json`
|
|
2. Extract the container's unpatched `main.cjs` and run the patch script against it:
|
|
```bash
|
|
docker create --name trilium-tmp triliumnext/notes:latest
|
|
docker cp trilium-tmp:/usr/src/app/main.cjs ./main.cjs
|
|
docker rm trilium-tmp
|
|
node patch_main_cjs.js ./main.cjs
|
|
node --check ./main.cjs # always verify syntax before deploying
|
|
```
|
|
3. Bind-mount the patched `main.cjs` over the original in `docker-compose.yml`:
|
|
```yaml
|
|
services:
|
|
trilium:
|
|
image: triliumnext/notes:latest
|
|
volumes:
|
|
- ./data:/home/node/trilium-data
|
|
- ./main.cjs:/usr/src/app/main.cjs:ro
|
|
- ./translation.json:/usr/src/app/public/translations/ko/translation.json:ro
|
|
- ./server.json:/usr/src/app/assets/translations/ko/server.json:ro
|
|
```
|
|
4. Start the container, then in the app go to Options → Localization and select "한국어".
|
|
|
|
### Important: don't `docker cp` and stop there
|
|
|
|
Files copied into a container with `docker cp` live only in its writable layer —
|
|
they disappear the moment the container is recreated (`docker compose down && up`,
|
|
not just `restart`). Always bind-mount the three files above from the host, as shown
|
|
in step 3, or the translation will silently vanish on the next redeploy while the
|
|
language list (which lives inside the bind-mounted `main.cjs`) keeps working —
|
|
producing a confusing partial-translation state that has nothing to do with locale
|
|
or browser and everything to do with a missing file on the server.
|
|
|
|
### Known gap: CKEditor's own toolbar
|
|
|
|
CKEditor5's own UI strings (toolbar button labels like "Paragraph", "Heading 2",
|
|
"Bold") come from a separate translation system (`window.CKEDITOR_TRANSLATIONS`)
|
|
that isn't touched by this project. As of the tested build, **no** language —
|
|
not German, French, Spanish, Chinese, or any other already-"supported" language —
|
|
ships a real CKEditor dictionary either; it falls back to English UI for everyone.
|
|
This is a pre-existing gap in the upstream build, not something specific to Korean.
|
|
|
|
## License
|
|
|
|
Same license as TriliumNext Notes itself. No warranty — this patches a compiled
|
|
binary by string-matching minified variable names, which is inherently fragile
|
|
across version upgrades.
|