+27
-11
@@ -17,6 +17,7 @@ same `--lang`) for its own report, independently of `deck-engine`.
|
||||
deck-engine --seed <string> --birth-date YYYY-MM-DD --birth-time HH:MM
|
||||
--birth-utc-offset <hours> --birth-lat <deg> --birth-lon <deg>
|
||||
[--date YYYY-MM-DDTHH:MM] [--format text|html|json]
|
||||
[--gender male|female|unspecified]
|
||||
```
|
||||
|
||||
| Flag | Required | Format | Meaning |
|
||||
@@ -29,6 +30,7 @@ deck-engine --seed <string> --birth-date YYYY-MM-DD --birth-time HH:MM
|
||||
| `--birth-lon` | yes | decimal degrees | Birth longitude, east positive. |
|
||||
| `--date` | no | `YYYY-MM-DDTHH:MM[:SS]` | UTC moment used for today's transits and as the moment the tarot seed is drawn against. Defaults to the current system time. |
|
||||
| `--format` | no | `text` \| `html` \| `json` | Output format, defaults to `text`. `json` always uses language-independent identifiers, ignoring `--lang`. |
|
||||
| `--gender` | no | `male` \| `female` \| `unspecified` | Who the reading is for. Only affects the Celtic Cross position text's pronouns (e.g. "His House" vs. "Her House" vs. "Their House") - never the chart/draw itself. Defaults to `unspecified` (pronoun-neutral phrasing). |
|
||||
| `--lang` | no | language code, e.g. `en`, `de` | Reading language, defaults to `en`. Matches a file named `<code>.lang` in `--i18n-dir` (see "Translations" below). Unknown codes or missing files fall back to English with a warning on stderr. |
|
||||
| `--i18n-dir` | no | path | Directory to look for `<lang>.lang` in. Defaults to an `i18n/` directory next to the binary itself (resolved from `argv[0]`, so `dist/deck-engine` finds `dist/i18n/` regardless of the caller's working directory). |
|
||||
|
||||
@@ -52,6 +54,7 @@ use:
|
||||
birth_utc_offset=2
|
||||
birth_lat=52.5200
|
||||
birth_lon=13.4050
|
||||
gender=unspecified
|
||||
lang=en
|
||||
```
|
||||
|
||||
@@ -59,8 +62,8 @@ use:
|
||||
with placeholder values (`YOUR_BIRTH_DATE_HERE`, etc.). `run-engine.sh`
|
||||
checks every birth field for an empty value or a leftover `YOUR_`
|
||||
placeholder and refuses to run with a clear error until the file is
|
||||
filled in; `lang` has no such check since it always has a usable
|
||||
default (`en`). Since `dist/` itself can be wiped (`make clean`, or
|
||||
filled in; `gender` and `lang` have no such check since they always
|
||||
have a usable default (`unspecified`/`en`). Since `dist/` itself can be wiped (`make clean`, or
|
||||
deleting the directory), the build also keeps a durable backup at
|
||||
`engine/scripts/user.properties.local` (gitignored) once the file
|
||||
looks filled in, and restores from it if `dist/user.properties` is
|
||||
@@ -81,6 +84,14 @@ catalog with the built-in English text as the fallback for any key the
|
||||
catalog doesn't have. See `CLAUDE.md`'s "Translations" section for the
|
||||
key-naming convention and how to add a new language.
|
||||
|
||||
Celtic Cross position text additionally varies with `--gender`: the
|
||||
plain key (e.g. `position.present.desc`) is the pronoun-neutral wording
|
||||
used for `unspecified`, and `.male`/`.female`-suffixed keys (e.g.
|
||||
`position.present.desc.male`) hold the gendered wording where it
|
||||
differs. A position whose wording doesn't vary by gender (e.g. "The
|
||||
Outcome") simply has no `.male`/`.female` keys - the neutral key's
|
||||
translation is used for every `--gender` value in that case.
|
||||
|
||||
`engine/i18n/en.lang` and `de.lang` are the shipped translation files;
|
||||
`make` copies `engine/i18n/*.lang` to `dist/i18n/` (refreshed on every
|
||||
build, like `dist/img/`). Adding a language is just dropping another
|
||||
@@ -146,7 +157,7 @@ Transiting Sun Opposition natal Moon (orb 3.7°)
|
||||
|
||||
===== Celtic Cross =====
|
||||
The Present The High Priestess (Reversed)
|
||||
This covers him: the general influence affecting the matter.
|
||||
This covers them: the general influence affecting the matter.
|
||||
Passion, moral or physical ardour, conceit, surface knowledge.
|
||||
...
|
||||
```
|
||||
@@ -171,8 +182,8 @@ cards rendered as an image:
|
||||
|
||||
### `--format json`
|
||||
|
||||
A single JSON object mirroring `DailyReading` exactly — `date`, `natal`,
|
||||
`transits`, `spread` — using the **slug** accessors
|
||||
A single JSON object mirroring `DailyReading` exactly — `date`, `gender`,
|
||||
`natal`, `transits`, `spread` — using the **slug** accessors
|
||||
(`astro_body_slug()`, `astro_sign_slug()`, `astro_moon_phase_slug()`,
|
||||
`astro_aspect_slug()`, `tarot_card_slug()`, `tarot_position_slug()`)
|
||||
rather than the display-name ones, so the output is identical regardless
|
||||
@@ -183,6 +194,7 @@ read.
|
||||
```json
|
||||
{
|
||||
"date": "2026-07-16",
|
||||
"gender": "unspecified",
|
||||
"natal": {
|
||||
"bodies": [
|
||||
{"body": "sun", "sign": "taurus", "degree_in_sign": 23.4926, "ecliptic_longitude": 53.4926, "house": 3},
|
||||
@@ -218,6 +230,10 @@ read.
|
||||
serialized here since that's the only thing the rest of this format
|
||||
(and the interpreter's own reports, which read this field back — see
|
||||
"The interpreter" below) ever display.
|
||||
- `gender` is `--gender`'s value (`male`/`female`/`unspecified`,
|
||||
`tarot_gender_slug()`) — who the reading is for. Only affects the
|
||||
Celtic Cross position text's pronouns, nothing else in this document.
|
||||
The interpreter reads this field back the same way it reads `date`.
|
||||
- `bodies` is always `NUM_BODIES` (10) entries, Sun..Pluto in `Body` enum
|
||||
order; `spread.positions` is always `TAROT_SPREAD_SIZE` (10) entries in
|
||||
`CelticCrossPosition` enum order (Present, Challenge, Crown,
|
||||
@@ -333,14 +349,14 @@ Top 5 significant transits:
|
||||
|
||||
Celtic Cross:
|
||||
1. The Present: The Emperor (Reversed)
|
||||
This covers him: the general influence affecting the matter.
|
||||
This covers them: the general influence affecting the matter.
|
||||
Benevolence, compassion, credit; also confusion to enemies, obstruction, immaturity.
|
||||
2. The Challenge: The Devil
|
||||
This crosses him: the nature of the obstacle in the matter.
|
||||
This crosses them: the nature of the obstacle in the matter.
|
||||
Ravage, violence, vehemence, extraordinary efforts, force, fatality.
|
||||
...
|
||||
7. Himself: The Magician
|
||||
His position or attitude in the circumstances.
|
||||
7. Themself: The Magician
|
||||
Their position or attitude in the circumstances.
|
||||
Skill, diplomacy, address, subtlety; self-confidence, will.
|
||||
...
|
||||
10. The Outcome: Strength
|
||||
@@ -381,7 +397,7 @@ Top 5 wichtige Transits:
|
||||
|
||||
Keltisches Kreuz:
|
||||
1. Die Gegenwart: Der Herrscher (Umgekehrt)
|
||||
Dies bedeckt ihn: der allgemeine Einfluss, der die Angelegenheit betrifft.
|
||||
Dies bedeckt die fragende Person: der allgemeine Einfluss, der die Angelegenheit betrifft.
|
||||
Wohlwollen, Mitgefühl, Ansehen; auch Verwirrung der Feinde, Behinderung, Unreife.
|
||||
...
|
||||
|
||||
@@ -407,7 +423,7 @@ HTML output:
|
||||
<div class="position">The Present</div>
|
||||
<img class="reversed" src="img/RWS_Tarot_04_Emperor.jpeg" alt="The Emperor">
|
||||
<div class="name">The Emperor (Reversed)</div>
|
||||
<div class="desc">This covers him: the general influence affecting the matter.</div>
|
||||
<div class="desc">This covers them: the general influence affecting the matter.</div>
|
||||
<div class="meaning">Benevolence, compassion, credit; also confusion to enemies, obstruction, immaturity.</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user