From 3e74c39480cb1236a31e7a167d306e32a0a92f5d Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 28 Jun 2022 12:04:32 +0200 Subject: fix #7225: change way we do i18n for contrib/ resource files --- .gitignore | 1 + contrib/Makefile.am | 7 +- contrib/extract.sh | 23 +++++ contrib/pogen.sh | 3 +- contrib/redux.al.json | 7 +- contrib/redux.be.json | 3 - contrib/redux.ch.json | 5 +- contrib/redux.countries.json | 194 +++++++++++++------------------------------ contrib/redux.cz.json | 5 +- contrib/redux.de.json | 5 +- contrib/redux.dk.json | 5 +- contrib/redux.es.json | 8 +- contrib/redux.fr.json | 5 +- contrib/redux.in.json | 3 - contrib/redux.it.json | 7 +- contrib/redux.jp.json | 5 +- contrib/redux.nl.json | 5 +- contrib/redux.sk.json | 5 +- contrib/redux.us.json | 4 +- contrib/redux.xx.json | 2 + po/POTFILES.in | 77 ++++++++++++++++- 21 files changed, 184 insertions(+), 195 deletions(-) create mode 100755 contrib/extract.sh diff --git a/.gitignore b/.gitignore index 0d5dbc1..998e44b 100644 --- a/.gitignore +++ b/.gitignore @@ -130,3 +130,4 @@ src/cli/test_reducer.err vgcore* __pycache__ tags +contrib/extracted.h diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 75bce03..85ee5ba 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -23,7 +23,8 @@ ppen_DATA = \ pp/en/0.xml \ pp/en/0.html - +extracted.h: *.json + ./extract.sh pkgdatadir= $(prefix)/share/anastasis/ @@ -46,7 +47,9 @@ EXTRA_DIST = \ uncrustify_precommit \ gana.sh \ gana-update.sh \ - microhttpd.tag + microhttpd.tag \ + extract.sh \ + extracted.h pkgdata_DATA = \ redux.al.json \ diff --git a/contrib/extract.sh b/contrib/extract.sh new file mode 100755 index 0000000..e879e74 --- /dev/null +++ b/contrib/extract.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# This file is in the public domain. +# It extracts translateable strings from the JSON file(s). +# +# The resulting 'extracted.h' file is only used by +# gettext, and not in the actual code. We still make +# sure it is legal C code. + +for n in redux.??.json +do + jq '.required_attributes[].label' < $n | awk '{print "_(" $0 "),"}' >> prep.h +done + +jq '.countries[].continent' < redux.countries.json | awk '{print "_(" $0 "),"}' >> prep.h + +jq '.countries[].name' < redux.countries.json | awk '{print "_(" $0 "),"}' >> prep.h + +echo "// This is a generated file, see extract.sh" > extracted.h +echo "const char * i18n[] = {" >> extracted.h +sort prep.h | uniq >> extracted.h +echo "};" >> extracted.h + +rm -f prep.h diff --git a/contrib/pogen.sh b/contrib/pogen.sh index 89140ea..21eedce 100755 --- a/contrib/pogen.sh +++ b/contrib/pogen.sh @@ -1,3 +1,4 @@ #!/bin/sh find src -name "*.c" | sort > po/POTFILES.in -find contrib -name "*.json" | sort >> po/POTFILES.in +echo "contrib/extracted.h" >> po/POTFILES.in +echo "src/authorization/extracted.h" >> po/POTFILES.in diff --git a/contrib/redux.al.json b/contrib/redux.al.json index bb4360e..2696540 100644 --- a/contrib/redux.al.json +++ b/contrib/redux.al.json @@ -19,11 +19,8 @@ { "type": "string", "name": "nid_number", - "label": "Numri i Identitetit", - "label_i18n":{ - "en": "Identity Number", - "al": "Numri i Identitetit" - }, + "label": "Identity Number", + "tooltip": "Numri i Identitetit", "widget": "anastasis_gtk_ia_nid_al", "uuid": "256e5d30-d65e-481b-9ac4-55f5ac03b24a", "validation-regex": "^[0-9A-T][0-9](((0|5)[0-9])|10|11|51|52)[0-9]{3}[A-W]$", diff --git a/contrib/redux.be.json b/contrib/redux.be.json index 821a3eb..80711cf 100644 --- a/contrib/redux.be.json +++ b/contrib/redux.be.json @@ -27,9 +27,6 @@ "type": "string", "name": "nrn_number", "label": "National Register Number", - "label_i18n":{ - "en": "National Register Number" - }, "widget": "anastasis_gtk_ia_nid_be", "uuid": "0452f99a-06f7-48bd-8ac0-2e4ed9a24560", "validation-regex": "^[0-9]{11}$", diff --git a/contrib/redux.ch.json b/contrib/redux.ch.json index ecda1a0..6b99ca1 100644 --- a/contrib/redux.ch.json +++ b/contrib/redux.ch.json @@ -27,10 +27,7 @@ "type": "string", "name": "ahv_number", "label": "AHV number", - "label_i18n":{ - "de_DE":"AHV-Nummer", - "de_CH":"AHV-Nummer" - }, + "tooltip":"AHV-Nummer", "widget": "anastasis_gtk_ia_ahv", "uuid" : "1da87570-ba16-4f62-8a7e-cbda92f51591", "validation-regex": "^(756)\\.[0-9]{4}\\.[0-9]{4}\\.[0-9]{2}|(756)[0-9]{10}$", diff --git a/contrib/redux.countries.json b/contrib/redux.countries.json index 0d824fc..cbccb0a 100644 --- a/contrib/redux.countries.json +++ b/contrib/redux.countries.json @@ -3,168 +3,94 @@ "SPDX-License-Identifier": "GPL3.0-or-later", "countries": [ { - "code" : "al", - "name" : "Albania", - "continent" : "Europe", - "name_i18n" : { - "de_DE": "Albanien", - "en_UK": "Albania" - }, - "call_code" : "+355" + "code" : "al", + "name" : "Albania", + "continent" : "Europe", + "call_code" : "+355" }, { - "code" : "be", - "name" : "Belgium", - "continent" : "Europe", - "name_i18n" : { - "de_DE": "Belgien", - "en_UK": "Belgium" - }, - "call_code" : "+32" + "code" : "be", + "name" : "Belgium", + "continent" : "Europe", + "call_code" : "+32" }, { - "code" : "ch", - "name" : "Switzerland", - "continent" : "Europe", - "name_i18n" : { - "de_DE": "Schweiz", - "de_CH": "Schwiiz", - "fr_FR": "Suisse", - "en_UK": "Swiss" - }, - "call_code" : "+41" + "code" : "ch", + "name" : "Switzerland", + "continent" : "Europe", + "call_code" : "+41" }, { - "code" : "cz", - "name" : "Czech Republic", - "continent" : "Europe", - "name_i18n" : { - "en_UK": "Czech Republic" - }, - "call_code" : "+420" + "code" : "cz", + "name" : "Czech Republic", + "continent" : "Europe", + "call_code" : "+420" }, { - "code" : "de", - "name" : "Germany", - "continent" : "Europe", - "continent_i18n" : { "de_DE" : "Europa" }, - "name_i18n" : { - "de_DE": "Deutschland", - "de_CH": "Deutschland", - "fr_FR": "Allemagne", - "en_UK": "Germany" - }, - "call_code" : "+49" + "code" : "de", + "name" : "Germany", + "continent" : "Europe", + "call_code" : "+49" }, { - "code" : "dk", - "name" : "Denmark", - "continent" : "Europe", - "continent_i18n" : { "de_DE" : "Europa" }, - "name_i18n" : { - "en_UK": "Denmark" - }, - "call_code" : "+45" + "code" : "dk", + "name" : "Denmark", + "continent" : "Europe", + "call_code" : "+45" }, { - "code" : "es", - "name" : "Spain", - "continent" : "Europe", - "continent_i18n" : { "es_ES" : "Europa" }, - "name_i18n" : { - "es_ES": "España" - }, - "call_code" : "+44" + "code" : "es", + "name" : "Spain", + "continent" : "Europe", + "call_code" : "+44" }, { - "code" : "fr", - "name" : "France", - "continent" : "Europe", - "name_i18n" : { - "de_DE": "Frankreich", - "fr_FR": "La France" - }, - "call_code" : "+33" + "code" : "fr", + "name" : "France", + "continent" : "Europe", + "call_code" : "+33" }, { - "code" : "in", - "name" : "India", - "continent" : "India", - "continent_i18n" : { "en_EN" : "India" }, - "name_i18n" : { - "de_DE": "Indien", - "de_CH": "Indien", - "fr_FR": "l'Inde", - "en_UK": "India" - }, - "call_code" : "+91" + "code" : "in", + "name" : "India", + "continent" : "India", + "call_code" : "+91" }, { - "code" : "it", - "name" : "Italy", - "continent" : "Europe", - "name_i18n" : { - "de_DE": "Italien", - "en_UK": "Italy" - }, - "call_code" : "+39" + "code" : "it", + "name" : "Italy", + "continent" : "Europe", + "call_code" : "+39" }, { - "code" : "jp", - "name" : "Japan", - "continent" : "Asia", - "continent_i18n" : { "en_EN" : "Japan" }, - "name_i18n" : { - "de_DE": "Japan", - "de_CH": "Japan", - "en_UK": "Japan" - }, - "call_code" : "+81" + "code" : "jp", + "name" : "Japan", + "continent" : "Asia", + "call_code" : "+81" }, { - "code" : "nl", - "name" : "Netherlands", - "continent" : "Europe", - "name_i18n" : { - "de_DE": "Niederlande", - "nl_NL": "Nederland", - "en_UK": "Netherlands" - }, - "call_code" : "+31" + "code" : "nl", + "name" : "Netherlands", + "continent" : "Europe", + "call_code" : "+31" }, { - "code" : "sk", - "name" : "Slovakia", - "continent" : "Europe", - "name_i18n" : { - "en_UK": "Slovakia" - }, - "call_code" : "+421" + "code" : "sk", + "name" : "Slovakia", + "continent" : "Europe", + "call_code" : "+421" }, { - "code" : "us", - "name" : "United States of America (USA)", - "continent" : "North America", - "continent_i18n" : { "de_DE" : "Nordamerika" }, - "name_i18n" : { - "de_DE": "Vereinigte Staaten von Amerika (USA)", - "de_CH": "Vereinigte Staaten von Amerika (USA)", - "fr_FR": "États-Unis d'Amérique (USA)", - "en_UK": "United States of America (USA)" - }, - "call_code" : "+1" + "code" : "us", + "name" : "United States of America (USA)", + "continent" : "North America", + "call_code" : "+1" }, { - "code" : "xx", - "name" : "Testland", - "continent" : "Demoworld", - "name_i18n" : { - "de_DE": "Testlandt", - "de_CH": "Testlandi", - "fr_FR": "Testpais", - "en_UK": "Testland" - }, - "call_code" : "+00" + "code" : "xx", + "name" : "Testland", + "continent" : "Demoworld", + "call_code" : "+00" } ] } diff --git a/contrib/redux.cz.json b/contrib/redux.cz.json index e7118a8..3f11118 100644 --- a/contrib/redux.cz.json +++ b/contrib/redux.cz.json @@ -20,10 +20,7 @@ "type": "string", "name": "birth_number", "label": "Birth Number", - "label_i18n":{ - "en": "Birth Number", - "cz": "rodné číslo" - }, + "tooltip": "rodné číslo", "widget": "anastasis_gtk_ia_birthnumber_cz", "uuid": "03e3a05b-1192-44f1-ac36-7425512eee1a", "validation-regex": "^[0-9]{2}(((0|2|5|7)[0-9])|10|11|31|32|51|52|81|82)/[0-9]{3}[0-9]?$", diff --git a/contrib/redux.de.json b/contrib/redux.de.json index 21bbaaf..e62f24a 100644 --- a/contrib/redux.de.json +++ b/contrib/redux.de.json @@ -27,10 +27,7 @@ "type": "string", "name": "social_security_number", "label": "Social security number", - "label_i18n":{ - "de_DE": "Deutsche Sozialversicherungsnummer", - "en": "German Social security number" - }, + "tooltip": "Deutsche Sozialversicherungsnummer", "widget": "anastasis_gtk_ia_ssn_de", "uuid": "d5e2aa79-1c88-4cf4-a4d2-252508b38e05", "validation-regex": "^[0-9]{8}[[:upper:]][0-9]{3}$", diff --git a/contrib/redux.dk.json b/contrib/redux.dk.json index 29c7c6c..66859b5 100644 --- a/contrib/redux.dk.json +++ b/contrib/redux.dk.json @@ -20,10 +20,7 @@ "type": "string", "name": "cpr_number", "label": "CPR-nummer", - "label_i18n":{ - "en": "CPR Number", - "dk": "CPR-nummer" - }, + "tooltip": "CPR-nummer", "widget": "anastasis_gtk_ia_cpr_dk", "uuid": "38f13a4d-4302-4ada-ada1-c3ff4a8ff689", "validation-regex": "^(0[1-9]|[1-2][0-9]|30|31)((0[1-9]|10|11|12))[0-9]{2}-[0-9A-Z]{4}$" diff --git a/contrib/redux.es.json b/contrib/redux.es.json index d4a6b2a..320d346 100644 --- a/contrib/redux.es.json +++ b/contrib/redux.es.json @@ -27,9 +27,7 @@ "type": "string", "name": "tax_number", "label": "Tax number", - "label_i18n":{ - "es_ES":"Número de Identificación Fiscal (DNI, NIE)" - }, + "tooltip":"Número de Identificación Fiscal (DNI, NIE)", "widget": "anastasis_gtk_ia_es_dni", "uuid" : "ac8bd865-6be8-445c-b650-6a18eef16a49", "validation-regex": "^[0-9MXYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$", @@ -39,9 +37,7 @@ "type": "string", "name": "ssn_number", "label": "Social security number", - "label_i18n":{ - "es_ES":"Número de Seguridad Social" - }, + "tooltip":"Número de Seguridad Social", "widget": "anastasis_gtk_ia_es_ssn", "uuid" : "22396a19-f3bb-497e-b63a-961fd639140e", "validation-regex": "^[0-9]{11}$" diff --git a/contrib/redux.fr.json b/contrib/redux.fr.json index 1b57210..fe6ce9b 100644 --- a/contrib/redux.fr.json +++ b/contrib/redux.fr.json @@ -27,10 +27,7 @@ "type": "string", "name": "social_security_number", "label": "Code Insee", - "label_i18n":{ - "fr_FR": "Code Insee", - "en": "INSEE code" - }, + "tooltip": "Code Insee", "widget": "anastasis_gtk_ia_insee_fr", "uuid": "2f36a81c-3f6d-41f3-97ee-9c885bc41873", "validation-regex": "^[0-9]{15}$", diff --git a/contrib/redux.in.json b/contrib/redux.in.json index a53035c..e7dc8fa 100644 --- a/contrib/redux.in.json +++ b/contrib/redux.in.json @@ -27,9 +27,6 @@ "type": "string", "name": "aadhar_number", "label": "Aadhar number", - "label_i18n":{ - "en": "Aadhar number" - }, "widget": "anastasis_gtk_ia_aadhar_in", "uuid": "55afe97a-98bc-48d1-bb37-a9658be3fdc9", "validation-regex": "^[2-9]{1}[0-9]{3}\\s[0-9]{4}\\s[0-9]{4}$", diff --git a/contrib/redux.it.json b/contrib/redux.it.json index f744497..f67cd45 100644 --- a/contrib/redux.it.json +++ b/contrib/redux.it.json @@ -19,11 +19,8 @@ { "type": "string", "name": "fiscal_code", - "label": "Codice fiscale", - "label_i18n":{ - "it": "Codice fiscale", - "en": "Fiscal code" - }, + "label": "Fiscal code", + "tooltip": "Codice fiscale", "widget": "anastasis_gtk_ia_cf_it", "uuid": "88f53c51-52ad-4d63-a163-ec042589f925", "validation-regex": "^[[:upper:]]{6}[0-9]{2}[A-EHLMPRT](([0-24-6][0-9])|(30|31|70|71))[A-MZ][0-9]{3}[A-Z]$", diff --git a/contrib/redux.jp.json b/contrib/redux.jp.json index 2a80cdf..9eda2f6 100644 --- a/contrib/redux.jp.json +++ b/contrib/redux.jp.json @@ -27,10 +27,7 @@ "type": "string", "name": "my_number", "label": "My number", - "label_i18n":{ - "en": "My number", - "jp": "マイナンバー" - }, + "tooltip": "マイナンバー", "widget": "anastasis_gtk_ia_my_jp", "uuid": "90848f42-a83e-4226-8186-329696c14152", "validation-regex": "^[0-9]{12}$" diff --git a/contrib/redux.nl.json b/contrib/redux.nl.json index 506c2d0..ce6b766 100644 --- a/contrib/redux.nl.json +++ b/contrib/redux.nl.json @@ -27,10 +27,7 @@ "type": "string", "name": "social_security_number", "label": "Citizen Service Number", - "label_i18n":{ - "nl_NL": "Burgerservicenummer (BSN)", - "en": "Citizen Service Number" - }, + "tooltip": "Burgerservicenummer (BSN)", "widget": "anastasis_gtk_ia_ssn_nl", "uuid": "b6bf1f14-1f85-4afb-af21-f54b88490bdc", "validation-regex": "^[1-9][0-9]{8}$", diff --git a/contrib/redux.sk.json b/contrib/redux.sk.json index e2acef7..7520d15 100644 --- a/contrib/redux.sk.json +++ b/contrib/redux.sk.json @@ -20,10 +20,7 @@ "type": "string", "name": "birth_number", "label": "Birth Number", - "label_i18n":{ - "en": "Birth Number", - "sk": "rodné číslo" - }, + "tooltip": "rodné číslo", "widget": "anastasis_gtk_ia_birthnumber_sk", "uuid": "1cd372fe-2cea-4928-9f29-66f2bdd8555c", "validation-regex": "^[0-9]{2}(((0|2|5|7)[0-9])|10|11|31|32|51|52|81|82)/[0-9]{3}[0-9]?$", diff --git a/contrib/redux.us.json b/contrib/redux.us.json index 08c0167..c6d0189 100644 --- a/contrib/redux.us.json +++ b/contrib/redux.us.json @@ -27,9 +27,7 @@ "type": "string", "name": "social_security_number", "label": "Social security number", - "label_i18n":{ - "en": "US Social security number" - }, + "tooltip": "US Social security number", "widget": "anastasis_gtk_ia_ssn_us", "uuid": "310a138c-b0b7-4985-b8b8-d00e765e9f9b", "validation-regex": "^[0-9]{3}-[0-9]{2}-[0-9]{4}$", diff --git a/contrib/redux.xx.json b/contrib/redux.xx.json index 1b11cd5..71d67e5 100644 --- a/contrib/redux.xx.json +++ b/contrib/redux.xx.json @@ -21,6 +21,7 @@ "type": "string", "name": "prime_number", "label": "Prime number", + "tooltip": "Mathematics is fun", "widget": "anastasis_gtk_xx_prime", "uuid" : "39190a95-cacb-4412-8bae-1f7da3f980b4", "validation-regex": "^[0-9]+$", @@ -31,6 +32,7 @@ "type": "string", "name": "sq_number", "label": "Square number", + "tooltip": "Mathematics is fun", "widget": "anastasis_gtk_xx_square", "uuid" : "ed790bca-89bf-11eb-96f2-233996cf644e", "validation-regex": "^[0-9]+$", diff --git a/po/POTFILES.in b/po/POTFILES.in index 1c8ee65..7395de9 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,2 +1,77 @@ -# List of source files which contain translatable strings. +src/authorization/anastasis_authorization_plugin.c +src/authorization/anastasis_authorization_plugin_email.c +src/authorization/anastasis_authorization_plugin_file.c +src/authorization/anastasis_authorization_plugin_iban.c +src/authorization/anastasis_authorization_plugin_post.c +src/authorization/anastasis_authorization_plugin_sms.c +src/authorization/anastasis_authorization_plugin_totp.c +src/authorization/anastasis-helper-authorization-iban.c +src/authorization/iban.c +src/authorization/libanastasiseufin/lae_common.c +src/authorization/libanastasiseufin/lae_credit.c +src/authorization/libanastasiseufin/lae_parse.c +src/backend/anastasis-httpd.c +src/backend/anastasis-httpd_config.c +src/backend/anastasis-httpd_mhd.c +src/backend/anastasis-httpd_policy.c +src/backend/anastasis-httpd_policy-meta.c +src/backend/anastasis-httpd_policy-upload.c +src/backend/anastasis-httpd_terms.c +src/backend/anastasis-httpd_truth-challenge.c +src/backend/anastasis-httpd_truth-solve.c +src/backend/anastasis-httpd_truth-upload.c +src/cli/anastasis-cli-discover.c +src/cli/anastasis-cli-redux.c +src/lib/anastasis_backup.c +src/lib/anastasis_meta.c +src/lib/anastasis_recovery.c +src/reducer/anastasis_api_backup_redux.c +src/reducer/anastasis_api_discovery.c src/reducer/anastasis_api_recovery_redux.c +src/reducer/anastasis_api_redux.c +src/reducer/validation_CH_AHV.c +src/reducer/validation_CZ_BN.c +src/reducer/validation_DE_SVN.c +src/reducer/validation_DE_TIN.c +src/reducer/validation_ES_DNI.c +src/reducer/validation_FR_INSEE.c +src/reducer/validation_IN_AADHAR.c +src/reducer/validation_IT_CF.c +src/reducer/validation_NL_BSN.c +src/reducer/validation_XX_SQUARE.c +src/reducer/validation_XY_PRIME.c +src/restclient/anastasis_api_config.c +src/restclient/anastasis_api_curl_defaults.c +src/restclient/anastasis_api_keyshare_lookup.c +src/restclient/anastasis_api_policy_lookup.c +src/restclient/anastasis_api_policy_meta_lookup.c +src/restclient/anastasis_api_policy_store.c +src/restclient/anastasis_api_truth_challenge.c +src/restclient/anastasis_api_truth_solve.c +src/restclient/anastasis_api_truth_store.c +src/stasis/anastasis-dbinit.c +src/stasis/anastasis_db_plugin.c +src/stasis/plugin_anastasis_postgres.c +src/stasis/test_anastasis_db.c +src/testing/test_anastasis_api.c +src/testing/test_anastasis.c +src/testing/testing_api_cmd_config.c +src/testing/testing_api_cmd_policy_lookup.c +src/testing/testing_api_cmd_policy_store.c +src/testing/testing_api_cmd_truth_challenge.c +src/testing/testing_api_cmd_truth_solve.c +src/testing/testing_api_cmd_truth_store.c +src/testing/testing_api_helpers.c +src/testing/testing_api_traits.c +src/testing/testing_cmd_challenge_answer.c +src/testing/testing_cmd_policy_create.c +src/testing/testing_cmd_recover_secret.c +src/testing/testing_cmd_secret_share.c +src/testing/testing_cmd_truth_upload.c +src/util/anastasis-config.c +src/util/anastasis_crypto.c +src/util/anastasis-crypto-tvg.c +src/util/os_installation.c +src/util/pin.c +src/util/test_anastasis_crypto.c +contrib/extracted.h -- cgit v1.2.3