Files
httrack/lang
Xavier Roche 7a7206d7f1 Update Turkish translation from issue #306 contribution (#1048)
* Update Turkish translation from issue #306 contribution

Value-merges the epiusu/httrack fork's Turkish.txt into our own: our
key set and order are kept as-is, but each key's value is replaced
with the fork's translation where the fork has that key. 227 of our
508 values changed; the fork's 44 missing keys (translated against an
older English.txt) keep their existing value, and the fork's one key
absent from our English.txt is dropped.

Co-Authored-By: Ümit Solmaz <usncb@yandex.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

* Catch a value left as raw UTF-8 under a declared single-byte charset

A single-byte charset maps all 256 byte values, so the existing iconv
decode can never fail on one and cannot see a translation pasted in as
UTF-8 without transcoding. Only the C1-control heuristic stood in the
way, and a UTF-8 sequence whose bytes are all >= 0xA0 decodes to
ordinary printable characters under Latin-1/-9, sailing straight past
it.

Scan the raw bytes instead: a whole line that is itself valid
multi-byte UTF-8 under a file declaring a single-byte charset is the
leak. Scoped to those charsets because the premise fails for BIG5,
gb2312 and shift-jis, whose genuine text matches the same shape.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

* Two Polish translations were stored as UTF-8 in a windows-1250 file

The Keep-Alive option label and its tooltip carry raw UTF-8 bytes in a
file that declares windows-1250, so the GUI and htsserver render them
as mojibake ("połączenia"). Transcode just those two values; the rest
of the file was always windows-1250.

Found by the raw-UTF-8 check added in the previous commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

* The lang charset check uses grep -P, which macOS does not have

The raw-UTF-8 scan reached for a PCRE lookahead, so BSD grep exits with
"invalid option -- P" and the loop that consumes its output sees nothing.
The per-file scan then passes everything, and the negative control fires
instead: "the charset check passed a deliberately mislabelled file".

Express the same grammar as a POSIX ERE over raw bytes and let awk apply
it, which also folds the per-line length probe into the one pass. Checked
against the PCRE on all 30 lang files plus both probes, under gawk and
mawk: identical line sets.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

---------

Signed-off-by: Xavier Roche <roche@httrack.com>
Co-authored-by: Ümit Solmaz <usncb@yandex.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 17:22:29 +00:00
..

Translating HTTrack

Interface strings live here, one .txt file per language. English.txt is the reference: every other file maps each English string to its translation.

File format

Plain text, entries in consecutive pairs of lines:

<English string>
<translation>

The first line of a pair is the lookup key and must stay identical to the one in English.txt; translate only the second line. Missing entries fall back to the English text at runtime, so a partial translation works.

Preserve any \r\n, \t and printf placeholders (%s, %d, ...) in the translation.

A few LANGUAGE_* entries at the top describe the file itself:

Key Meaning
LANGUAGE_NAME Name shown in the language picker, in its own language (Deutsch, not German)
LANGUAGE_ISO ISO 639 code, with region if needed (de, pt_BR)
LANGUAGE_CHARSET Encoding the file is saved in (ISO-8859-1, windows-1251, UTF-8, ...)
LANGUAGE_AUTHOR Your name and contact
LANGUAGE_WINDOWSID Windows locale name used by WinHTTrack (German (Standard))

Save the file in exactly its declared LANGUAGE_CHARSET; an editor that rewrites it as UTF-8 will corrupt the non-ASCII bytes.

Adding or updating a language

  1. Copy English.txt to <Language>.txt, or edit the existing file.
  2. Translate each second line; leave the English keys untouched.
  3. Fill in the LANGUAGE_* header for a new file.
  4. Open a pull request, or attach the file to a GitHub issue.

When new strings land in English.txt they show up untranslated (as English) until a translator fills them in.