* 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>
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
- Copy
English.txtto<Language>.txt, or edit the existing file. - Translate each second line; leave the English keys untouched.
- Fill in the
LANGUAGE_*header for a new file. - 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.