### 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", "The wallet will avoid paying less than the minimum relay fee."),
QT_TRANSLATE_NOOP("bitcoin-core", "This is experimental software."),
QT_TRANSLATE_NOOP("bitcoin-core", "This is the minimum transaction fee you pay on every transaction."),
QT_TRANSLATE_NOOP("bitcoin-core", "This is the transaction fee you will pay if you send a transaction."),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction amount too small"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction amounts must not be negative"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction fee and change calculation failed"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction has too long of a mempool chain"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction must have at least one recipient"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction too large"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer (bind returned error %s)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer. %s is probably already running."),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to create the PID file '%s': %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to generate initial keys"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to generate keys"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to start HTTP server. See debug log for details."),
QT_TRANSLATE_NOOP("bitcoin-core", "Unknown -blockfilterindex value %s."),
QT_TRANSLATE_NOOP("bitcoin-core", "Unknown address type '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unknown change type '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unknown network specified in -onlynet: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Unsupported logging category %s=%s."),
QT_TRANSLATE_NOOP("bitcoin-core", "Upgrading UTXO database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Upgrading txindex database"),
QT_TRANSLATE_NOOP("bitcoin-core", "User Agent comment (%s) contains unsafe characters."),
QT_TRANSLATE_NOOP("bitcoin-core", "Verifying blocks..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Verifying wallet(s)..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart %s to complete"),
QT_TRANSLATE_NOOP("bitcoin-core", "Warning: unknown new rules activated (versionbit %i)"),
};