### 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", "Error initializing block database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing wallet database environment %s!"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s: Private keys can only be disabled during creation"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s: Wallet corrupted"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s: Wallet requires newer version of %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading block database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error opening block database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error reading from database, shutting down."),
QT_TRANSLATE_NOOP("bitcoin-core", "Error upgrading chainstate database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error: Disk space is low for %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "Error: Keypool ran out, please call keypoolrefill first"),
QT_TRANSLATE_NOOP("bitcoin-core", "Failed to listen on any port. Use -listen=0 if you want this."),
QT_TRANSLATE_NOOP("bitcoin-core", "Failed to rescan the wallet during initialization"),
QT_TRANSLATE_NOOP("bitcoin-core", "Failed to verify database"),
QT_TRANSLATE_NOOP("bitcoin-core", "Fee rate (%s) is lower than the minimum fee rate setting (%s)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Ignoring duplicate -wallet %s."),
QT_TRANSLATE_NOOP("bitcoin-core", "Importing..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Incorrect or no genesis block found. Wrong datadir for network?"),
QT_TRANSLATE_NOOP("bitcoin-core", "Initialization sanity check failed. %s is shutting down."),
QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient funds"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -onion address or hostname: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address or hostname: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid P2P permission: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -%s=<amount>: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -discardfee=<amount>: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -fallbackfee=<amount>: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid netmask specified in -whitelist: '%s'"),
QT_TRANSLATE_NOOP("bitcoin-core", "Loading P2P addresses..."),