### The Problem

Using native Qt translation files (TS, `*.ts`) for exchanging with Transifex platform limits means to provide context
to translators to the only category:

| C++ source code                               | TS XML element                                 | Transifex metadata
|-----------------------------------------------|------------------------------------------------|:------------------:
| Class Name                                    | `<name>`ClassName`</name>`                     | Context
| `disambiguation` parameter of `tr()` function | `<comment>`Short comment`</comment>`           | N/A
| [Translator Comments](https://doc.qt.io/qt-5/i18n-source-translation.html#translator-comments) `//: ...` | `<extracomment>`Nice comment.`</extracomment>` | N/A

More details:
- https://docs.transifex.com/formats/introduction
- https://docs.transifex.com/formats/qt-ts
- https://doc.qt.io/qt-5/linguist-ts-file-format.html

### The Solution

[XLIFF](https://en.wikipedia.org/wiki/XLIFF) file format is supported by Transifex much better.

And Qt provides us with a stand-alone conversion tool `lconvert`.

```sh
$ lconvert -o bitcoin_es.xlf -i bitcoin_en.ts
```

Now more context options are available:

| TS XML element                                 | XLIFF XML element                               | Transifex metadata
|------------------------------------------------|-------------------------------------------------|:------------------:
| `<name>`ClassName`</name>`                     | `<group resname="ClassName">`...`</group>`      | yes
| `<comment>`Short comment`</comment>`           | `<context>`Short comment`</context>`            | yes
| `<extracomment>`Nice comment.`</extracomment>` | `<note from="developer">`Nice comment.`</note>` | yes

More details:
- https://docs.transifex.com/formats/xliff
- https://code.qt.io/cgit/qt/qttools.git/tree/src/linguist/lconvert/lconvert.pro?h=5.12.10

---

Looking for Concept (N)ACKs.
QT_TRANSLATE_NOOP("bitcoin-core", "Loading banlist..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Loading wallet..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Need to specify a port with -whitebind: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>."),
QT_TRANSLATE_NOOP("bitcoin-core", "Not enough file descriptors available."),
QT_TRANSLATE_NOOP("bitcoin-core", "Prune cannot be configured with a negative value."),
QT_TRANSLATE_NOOP("bitcoin-core", "Prune mode is incompatible with -blockfilterindex."),
QT_TRANSLATE_NOOP("bitcoin-core", "Prune mode is incompatible with -txindex."),
QT_TRANSLATE_NOOP("bitcoin-core", "Pruning blockstore..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Reducing -maxconnections from %d to %d, because of system limitations."),
QT_TRANSLATE_NOOP("bitcoin-core", "Replaying blocks..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Rewinding blocks..."),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to execute statement to verify database: %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to fetch the application id: %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to prepare statement to verify database: %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to read database verification error: %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Unexpected application id. Expected %u, got %u"),
QT_TRANSLATE_NOOP("bitcoin-core", "Section [%s] is not recognized."),
QT_TRANSLATE_NOOP("bitcoin-core", "Signing transaction failed"),
QT_TRANSLATE_NOOP("bitcoin-core", "Specified -walletdir \"%s\" does not exist"),
QT_TRANSLATE_NOOP("bitcoin-core", "Specified -walletdir \"%s\" is a relative path"),
QT_TRANSLATE_NOOP("bitcoin-core", "Specified -walletdir \"%s\" is not a directory"),
QT_TRANSLATE_NOOP("bitcoin-core", "Specified blocks directory \"%s\" does not exist."),
QT_TRANSLATE_NOOP("bitcoin-core", "Starting network threads..."),
QT_TRANSLATE_NOOP("bitcoin-core", "The source code is available from %s."),
QT_TRANSLATE_NOOP("bitcoin-core", "The specified config file %s does not exist\n"),
QT_TRANSLATE_NOOP("bitcoin-core", "The transaction amount is too small to pay the fee"),