diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c1e14c978..b2c7aee5e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -59,6 +59,16 @@ jobs: cp -r ./seedsigner-screenshots ./artifacts/ - name: Coverage report run: coverage report + - name: Check .pot file freshness + run: | + python -m pip install Babel setuptools + python setup.py extract_messages + if ! git diff -I'^"POT-Creation-Date: ' --exit-code l10n/messages.pot; then + echo "::warning title=Stale .pot file::Localizable strings have changed but l10n/messages.pot was not updated." + echo "### 🌐 Localization Drift Detected" >> $GITHUB_STEP_SUMMARY + echo "Localizable strings have changed but \`l10n/messages.pot\` was not updated." >> $GITHUB_STEP_SUMMARY + echo "The automated pipeline will handle this on merge, but you can run \`python setup.py extract_messages\` locally to sync now." >> $GITHUB_STEP_SUMMARY + fi - name: Archive CI Artifacts uses: actions/upload-artifact@v4 with: diff --git a/l10n/messages.pot b/l10n/messages.pot index 13ceef0bd..0b152ca3c 100644 --- a/l10n/messages.pot +++ b/l10n/messages.pot @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: seedsigner 0.8.7\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-03-05 22:02+0000\n" +"POT-Creation-Date: 2026-04-25 14:34+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.16.0\n" +"Generated-By: Babel 2.18.0\n" #. Testnet bitcoin #: src/seedsigner/gui/components.py @@ -78,6 +78,7 @@ msgstr "" #. Input number will be inserted (e.g. "input 3") #: src/seedsigner/gui/screens/psbt_screens.py +#, python-brace-format msgid "input {}" msgstr "" @@ -97,6 +98,7 @@ msgstr "" #. Inserts the recipient number (e.g. the fifth one is: "recipient 5") #: src/seedsigner/gui/screens/psbt_screens.py +#, python-brace-format msgid "recipient {}" msgstr "" @@ -138,6 +140,7 @@ msgstr[1] "" #. Denonination is inserted (e.g. your "btc change" or "sats change") #: src/seedsigner/gui/screens/psbt_screens.py +#, python-brace-format msgid "{} change" msgstr "" @@ -182,6 +185,7 @@ msgstr "" #. Inserts the percentage value of the animated QR scan progress #: src/seedsigner/gui/screens/scan_screens.py +#, python-brace-format msgid "{}%" msgstr "" @@ -260,6 +264,7 @@ msgstr "" #. Displays the page number and total: (e.g. page 1 of 6) #: src/seedsigner/gui/screens/seed_screens.py +#, python-brace-format msgid "Seed Words: {}/{}" msgstr "" @@ -348,6 +353,7 @@ msgstr "" #. Refers to the QR code size: 21x21, 25x25, or 29x29 #: src/seedsigner/gui/screens/seed_screens.py +#, python-brace-format msgid "Begin {}x{}" msgstr "" @@ -368,6 +374,7 @@ msgstr "" #. Inserts the nth address number (e.g. "Checking address 7") #: src/seedsigner/gui/screens/seed_screens.py +#, python-brace-format msgid "Checking address {}" msgstr "" @@ -377,6 +384,7 @@ msgstr "" #. Describes the address index (e.g. "index 7") #: src/seedsigner/gui/screens/seed_screens.py +#, python-brace-format msgid "index {}" msgstr "" @@ -498,6 +506,7 @@ msgstr "" #. current roll number vs total rolls (e.g. roll 7 of 50) #: src/seedsigner/gui/screens/tools_screens.py +#, python-brace-format msgid "Dice Roll {}/{}" msgstr "" @@ -509,6 +518,7 @@ msgstr "" #. Final word calc. `mnemonic_length` = 12 or 24. `num_bits` = 7 or 3 (bits of #. entropy in final word). #: src/seedsigner/gui/screens/tools_screens.py +#, python-brace-format msgid "" "The {mnemonic_length}th word is built from {num_bits} more entropy bits " "plus auto-calculated checksum." @@ -516,6 +526,7 @@ msgstr "" #. current coin-flip number vs total flips (e.g. flip 3 of 4) #: src/seedsigner/gui/screens/tools_screens.py +#, python-brace-format msgid "Coin Flip {}/{}" msgstr "" @@ -531,6 +542,7 @@ msgstr "" #. The additional entropy the user supplied (e.g. coin flips) #: src/seedsigner/gui/screens/tools_screens.py +#, python-brace-format msgid "Your input: \"{}\"" msgstr "" @@ -541,6 +553,7 @@ msgstr "" #. labeled presentation of the last word in a BIP-39 mnemonic seed phrase. #: src/seedsigner/gui/screens/tools_screens.py +#, python-brace-format msgid "Final Word: \"{}\"" msgstr "" @@ -567,6 +580,7 @@ msgstr "" #. Insert the number of addrs displayed per screen (e.g. "Next 10") #: src/seedsigner/gui/screens/tools_screens.py +#, python-brace-format msgid "Next {}" msgstr "" @@ -836,6 +850,7 @@ msgstr "" #. Inserts fingerprint w/"?" to indicate that this seed can't sign the current #. PSBT #: src/seedsigner/views/psbt_views.py +#, python-brace-format msgid "{} (?)" msgstr "" @@ -915,11 +930,13 @@ msgstr "" #. Variable is either "change" or "self-transfer". #: src/seedsigner/views/psbt_views.py +#, python-brace-format msgid "Transaction's {} address could not be verified from wallet descriptor." msgstr "" #. Variable is either "change" or "self-transfer". #: src/seedsigner/views/psbt_views.py +#, python-brace-format msgid "Transaction's {} address could not be generated from your seed." msgstr "" @@ -1058,6 +1075,7 @@ msgstr "" #. Inserts the word number (e.g. "Seed Word #6") #: src/seedsigner/views/seed_views.py +#, python-brace-format msgid "Seed Word #{}" msgstr "" @@ -1115,6 +1133,7 @@ msgstr "" #. Inserts the seed fingerprint #: src/seedsigner/views/seed_views.py +#, python-brace-format msgid "Wipe seed {} from the device?" msgstr "" @@ -1184,6 +1203,7 @@ msgstr "" #. Inserts the child index (e.g. "Child #0") #: src/seedsigner/views/seed_views.py +#, python-brace-format msgid "Child #{}" msgstr "" @@ -1229,6 +1249,7 @@ msgstr "" #. Inserts the word number (e.g. "Verify Word #1") #: src/seedsigner/views/seed_views.py +#, python-brace-format msgid "Verify Word #{}" msgstr "" @@ -1238,6 +1259,7 @@ msgstr "" #. Inserts the word number and the word (e.g. "Word #1 is not "apple"!") #: src/seedsigner/views/seed_views.py +#, python-brace-format msgid "Word #{} is not \"{}\"!" msgstr "" @@ -1342,6 +1364,7 @@ msgstr "" #. Multisig policy. For a "2 of 3" policy, "threshold" = 2; "n" = 3 #: src/seedsigner/views/seed_views.py +#, python-brace-format msgid "{threshold} of {n}" msgstr "" @@ -1374,6 +1397,7 @@ msgstr "" #. The name of the setting being configured (e.g. "Script types") will be #. inserted. #: src/seedsigner/views/settings_views.py +#, python-brace-format msgid "At least one option must be selected for \"{}\"." msgstr "" @@ -1425,11 +1449,13 @@ msgstr "" #. Inserts the number of dice rolls needed for a 12-word mnemonic #: src/seedsigner/views/tools_views.py +#, python-brace-format msgid "12 words ({} rolls)" msgstr "" #. Inserts the number of dice rolls needed for a 24-word mnemonic #: src/seedsigner/views/tools_views.py +#, python-brace-format msgid "24 words ({} rolls)" msgstr "" @@ -1473,6 +1499,7 @@ msgstr "" #. Multisig policy. For a "2 / 3 multisig" policy, "threshold" = 2; "n" = 3 #: src/seedsigner/views/tools_views.py +#, python-brace-format msgid "{threshold} / {n} multisig" msgstr "" @@ -1498,7 +1525,7 @@ msgid "Change Addrs" msgstr "" #: src/seedsigner/views/view.py -msgid "Scan" +msgid "Scan QR" msgstr "" #: src/seedsigner/views/view.py @@ -1546,6 +1573,7 @@ msgstr "" #. "network" will be mainnet/testnet/regtest. #: src/seedsigner/views/view.py +#, python-brace-format msgid "Current network setting ({network}) doesn't match {derivation_path}." msgstr "" @@ -1572,6 +1600,7 @@ msgstr "" #. Inserts the name of a settings option (e.g. "Persistent Settings" is #. currently...) #: src/seedsigner/views/view.py +#, python-brace-format msgid "\"{}\" is currently disabled in Settings." msgstr ""