# UECF Hebrew – Greek – Latin – Telugu – English Parallel Bible

A five-column parallel Bible reader for uecf.net, showing all 66 books of
the Protestant canon in Hebrew (transliterated), Greek (transliterated),
Latin (Vulgate), Telugu (Unicode), and English (NKJV), aligned verse by
verse.

## Sources

| Column  | Source app          | Script                                   |
|---------|----------------------|-------------------------------------------|
| Hebrew  | `romanhebrew`        | Romanized (Latin-script) transliteration  |
| Greek   | `romangreek`         | Romanized (Latin-script) transliteration, Old Testament portion rebuilt for this project (see below) |
| Latin   | `latin`               | Native Latin (Clementine Vulgate)         |
| Telugu  | `telugubible-latin`   | Native Telugu Unicode (despite the source folder's name, its actual text is Telugu script, not romanized -- verified by direct inspection; "latin" in that folder's name refers to its Vulgate/Catholic-canon book list, not its script) |
| English | `nkjv`                | New King James Version                     |

None of the five source app directories were modified. Every verse of
Hebrew, Latin, Telugu, and English text here is byte-identical to its
source app's own verse. The Greek column's New Testament text is likewise
byte-identical to `romangreek`'s existing NT data (SBLGNT-derived, already
accurate); its Old Testament text was rebuilt from a different, more
reliable source than `romangreek`'s original OCR pipeline -- see "Why the
Greek Old Testament was rebuilt" below.

Hebrew and Greek are shown in their existing Romanized form, as supplied,
and were **not** auto-converted to native Hebrew/Greek Unicode script.

## Why the Greek Old Testament was rebuilt

While building this app, cross-checking `romangreek`'s Old Testament verse
counts against NKJV's revealed that `romangreek`'s Septuagint text (itself
OCR'd from a 147-year-old scanned 1879 edition with no digital text layer)
had severely broken verse boundaries throughout -- e.g. its "Genesis
chapter 1" contained 44 mis-cut fragments instead of 31 real verses, with
individual verses ending mid-word. This is a pre-existing defect in that
OCR pipeline (documented at length, and honestly, in
`greek-old-testament/site/reports/known-limitations.txt`), not something
introduced by this project. The New Testament (SBLGNT-derived, extracted
from a PDF with genuine embedded text) was unaffected and is used as-is.

Rather than build this 5-language site on top of known-broken verse
alignment for 39 of its 66 books, the Old Testament Greek column was
rebuilt from **LXX-Rahlfs-1935** (Alfred Rahlfs' 1935 critical edition of
the Septuagint, digitized by Eliran Wong / the Open Scriptures Septuagint
Project, ultimately derived from the CATSS/CCAT academic Greek corpus):
<https://github.com/eliranwong/LXX-Rahlfs-1935>. That dataset provides
real, correctly-inflected Greek surface text (not just dictionary lemmas)
with reliable, independently-sourced verse boundaries.

**License and attribution.** This dataset is licensed **CC BY-NC-SA 4.0**
(Attribution-NonCommercial-ShareAlike), copyright Eliran Wong, based on
work from the CATSS/CCAT Septuagint project and the Open Scriptures
Septuagint Project. UECF.NET's use here is as a non-commercial church
ministry site, consistent with this license. Required attribution:
*"Greek Old Testament text derived from LXX-Rahlfs-1935 (Alfred Rahlfs'
1935 Septuaginta), © Eliran Wong / Open Scriptures Septuagint Project,
based on CATSS/CCAT data, licensed CC BY-NC-SA 4.0."* This attribution
must stay with any redistribution of this specific Greek Old Testament
text or its transliteration.

**Method** (`tools/rebuild_greek_ot.py`): the dataset supplies (a) a flat,
sequential word-by-word list of the entire LXX corpus in accented Unicode
Greek, and (b) a parallel list of verse-start markers (`Book chapter:verse`
-> starting word index) aligned to that word list. Each verse's text is
simply the words between its own start marker and the next verse's start
marker -- no text was rewritten, corrected, or invented; every word is
exactly as the source dataset has it, only correctly grouped into verses.
The result: Genesis 1 now has 31 correctly-bounded verses (compare
`romangreek`'s 44 broken fragments before this fix); across all 39 Old
Testament books, 7 books now match NKJV's chapter/verse structure exactly
and the rest are close, with genuine, well-documented ancient
Hebrew-vs-Greek versification differences (not defects -- see "Known
versification differences" below) accounting for most of what remains.
The romanized ("English script") form of this rebuilt Greek text was then
produced with the same `translit.py` engine already used for
`romangreek`'s New Testament, unchanged.

**Text-tradition choices.** Rahlfs prints more than one Greek textual
tradition for a few books; exactly one was chosen per book so this site
has a single coherent verse per reference. These choices are recorded,
with the reasoning, in `tools/rebuild_greek_ot.py`'s `BOOK_MAP` and echoed
in `reports/alignment_report.txt`:
- **Joshua, Judges:** the "B" (Codex Vaticanus) textual tradition (Rahlfs
  prints both "A" and "B" texts for these two books; "B" is the more
  complete of the two in this corpus).
- **Daniel:** Theodotion's Greek translation (`DanTh`), the version
  traditionally printed as "the" Septuagint Daniel in editions such as
  Brenton's -- the same edition family as this site's original OT PDF
  source -- rather than the Old Greek (`Dan`).
- **Ezra / Nehemiah:** Rahlfs' "2 Esdras" (23 chapters) combines both
  books; this site splits it at the conventional boundary (chapters 1-10
  = Ezra, 11-23 = Nehemiah, renumbered 1-13) to match the other four
  languages' book division.
- This rebuild does **not** touch `romangreek`'s live site data. The
  rebuilt 66-book Greek data set (both native Unicode and transliterated
  forms) is available as a ready-to-deploy fix for `romangreek`/
  `greek-bible` if UECF.NET wants to apply it there too -- ask for it
  separately; it was left out of this delivery to keep this folder to
  just what this app needs (it added ~25 MB of files this app never
  reads). That would be a separate, not-yet-applied deployment.

## Scope: 66-book Protestant canon

`romanhebrew`, `romangreek`, and `nkjv` each contain exactly the 66-book
Protestant canon. `latin` and `latin`'s Telugu Catholic-canon counterpart
contain 73 books (the same 66, plus 7 deuterocanonical/apocryphal books:
Baruch, 1-2 Maccabees, Judith, Sirach, Tobit, Wisdom). This site covers
the 66-book canon that all five sources share; the 7 extra books are out
of scope for this 5-way alignment, since three of the five columns would
be entirely blank for them. This matches the spec's own "at minimum
Genesis-Malachi, Matthew-Revelation" scope.

## Known versification differences (documented, not silently aligned)

Ancient translations don't always divide chapters and verses identically.
Where a genuine numbering difference exists between two Bible traditions,
this site does **not** force verses into artificial alignment -- each
chapter's verse list is the union of every verse number any of the five
sources uses for that chapter, and a language with no text at a given
verse number shows "—" rather than being renumbered. The most notable
cases (all inherited from the underlying texts, not artifacts of this
build):

- **Psalms:** the Greek (LXX) column keeps its own traditional numbering,
  which runs one behind the Hebrew/English numbering for most of the
  book (LXX merges Hebrew Psalms 9-10 and 114-115, and splits Hebrew
  Psalms 116 and 147 each into two) -- e.g. what this site's Hebrew,
  Latin, Telugu, and English columns call Psalm 23 lines up with the
  Greek column's own Psalm 22.
- **Malachi:** the Greek/Latin tradition has only 3 chapters; English
  chapter 4 corresponds to the end of Greek/Latin chapter 3. Malachi 4:2
  is one of this project's required test passages and is a direct
  example of this: the Greek column shows "—" at that specific
  chapter:verse key (the text exists, just under chapter 3 in that
  column) while the other four languages show real text.
- **Esther, Daniel:** the Greek text includes additional material beyond
  the Hebrew/English text in these two books.
- Full per-book, per-chapter detail is in `reports/alignment_report.txt`
  and `reports/alignment_report.json`.

## Data structure

Each book file (`data/books/<slug>.json`):

```json
{
  "id": "genesis", "number": 1, "testament": "OT",
  "nameEn": "Genesis", "nameHe": "Bereshit", "nameGr": "Genesis",
  "nameLa": "Genesis", "nameTe": "ఆదికాండము", "shortName": "Genesis",
  "chapterCount": 50,
  "chapters": [
    { "n": 1, "verses": [
      { "n": 1, "he": "...", "gr": "...", "la": "...", "te": "...", "en": "..." }
    ]}
  ]
}
```

`data/meta.json` lists all 66 books (id, number, testament, all five name
fields, chapterCount, per-chapter verseCounts). `data/search.json` is a
flat array of `[bookIndex, chapter, verse, he, gr, la, te, en]` rows.

## Regenerating the data

1. `tools/rebuild_greek_ot.py` -- rebuilds the Greek Old Testament from
   LXX-Rahlfs-1935 (requires that dataset checked out locally; only needs
   re-running if the Greek OT source changes).
2. `tools/merge.py` -- reads all five source apps' `data/meta.json` +
   `data/books/*.json` (edit the `SOURCES` paths at the top of the script
   to point at wherever those five apps live on the machine you're
   running it from) and writes this app's `data/`, plus
   `reports/alignment_report.{json,txt}`.

Neither script modifies any source app's own data.

## Search

The search box matches word/phrase text across all five languages by
default, or a single language via the "Search:" dropdown on the search
page. A recognized `Book chapter:verse` reference (e.g. "John 3:16")
jumps straight to that verse; a recognized book name jumps to its first
chapter. Results link directly to the matching verse.

## Responsive layout

- **Desktop / laptop (>= 1180px):** all five columns shown at once,
  verse-aligned in a single row, with a sticky Hebrew/Greek/Latin/
  Telugu/English column header.
- **Tablet (769-1180px):** the same five-column grid, but the verse list
  scrolls horizontally with the verse number pinned in place, so no
  column's text is shrunk to stay readable.
- **Phone (<= 768px):** each verse becomes a stacked card with all five
  languages labeled and listed vertically -- chosen over horizontal
  scrolling or shrinking text, per the spec's "prioritize readability"
  guidance.

## Deploying

Upload every file and folder in **this directory** (`index.html`,
`.htaccess`, `css/`, `js/`, `data/`, `reports/`, `tools/`, and the 66
per-book `<slug>.html` redirect stubs) directly into
`/hebrew-greek-latin-telugu-english/` on the web server -- do not upload
this folder itself as an extra nested level, and do not upload only a
subfolder of it. `tools/` and `reports/` are not required for the site to
function but are harmless to leave in place (matching the existing
`hebrew-english-parallel-bible` app's own deployed layout, which keeps
its `tools/` and `reports/` alongside `index.html`).

## Validation

`reports/alignment_report.json` / `.txt` are generated automatically by
`tools/merge.py` on every run -- they report per-book/chapter verse
counts, every missing-verse and duplicate-verse case by language, every
whole-book chapter-count mismatch, and pass/fail on the 13 required test
passages (Genesis 1 & 3, Psalm 23, Isaiah 53, Malachi 4, Matthew 1 & 5,
John 1, 3 & 14, Romans 8, 1 Corinthians 13, Revelation 21). Current
totals: 66 books, 1,204 chapters, 32,697 verse-rows; 29,473 (90.1%) have
all five languages present, 3,224 have at least one language missing at
that exact chapter:verse (almost entirely explained by the versification
differences above); zero duplicate verses in any language.

## Limitations

- Hebrew and Greek are transliterations (Latin-script phonetic
  representations), not the original scripts -- by design, per the
  project spec.
- The Greek Old Testament's text-tradition choices (Joshua/Judges "B"
  text, Theodotion Daniel) are documented above; a different, equally
  valid scholarly choice was possible for each.
- `latin` and `telugubible-latin`'s 7 deuterocanonical/apocryphal books
  are out of scope for this 5-way view (see "Scope" above).
- `data/search.json` (the full-text search index, all 5 languages x
  32,697 verse-rows) is about 25 MB. It is fetched lazily, only the first
  time a reader actually searches -- normal chapter reading never loads
  it -- but that first search will be slow on a poor connection. Splitting
  it into per-testament or per-language shards would reduce this; not
  done here to keep this build a direct extension of the existing
  UECF.NET `search.json` pattern used by every other Bible app on the
  site.
- This is a reading/reference tool, not a critical edition -- readers
  needing guaranteed letter-perfect text for citation should cross-check
  against a printed edition, as `romangreek`'s and `latin`'s own
  documentation already advises for their source material.
