From 803ee1290d0d3874212b289f46a0ae23b7abab0b Mon Sep 17 00:00:00 2001 From: James Date: Wed, 18 May 2022 12:13:33 +0100 Subject: [PATCH] i18n: Add locale key to API and start translating CSV/XLSX headers https://github.com/codeforIATI/iati-datastore/issues/341 Alter JS so locale key added to URL's Ignore locale key when checking for valid filters Start using flask-babel Set up our 2 current translations, with no translated strings. Set up custom extractor to get CSV column headings. Translate headers in CSV & XLSX Update README with instructions Add compile strings stage to deploy Fix tests --- .gitignore | 2 + README.md | 19 + fabfile.py | 2 + iati_datastore/iatilib/babel.cfg | 7 + iati_datastore/iatilib/frontend/api1.py | 1 + iati_datastore/iatilib/frontend/app.py | 9 +- .../iatilib/frontend/serialize/babel.py | 19 + .../iatilib/frontend/serialize/csv.py | 5 +- iati_datastore/iatilib/test/__init__.py | 24 + .../iatilib/test/test_serializers/__init__.py | 3 +- .../test_serializers/test_csv_activities.py | 39 +- .../test/test_serializers/test_csv_budgets.py | 9 +- .../test_serializers/test_csv_transactions.py | 11 +- .../translations/fr/LC_MESSAGES/messages.po | 828 ++++++++++++++++++ .../translations/pt/LC_MESSAGES/messages.po | 828 ++++++++++++++++++ .../query_builder_source/pages/index.vue | 1 + iati_datastore/setup.py | 1 + requirements.txt | 12 +- requirements_dev.txt | 8 + 19 files changed, 1791 insertions(+), 37 deletions(-) create mode 100644 iati_datastore/iatilib/babel.cfg create mode 100644 iati_datastore/iatilib/frontend/serialize/babel.py create mode 100644 iati_datastore/iatilib/translations/fr/LC_MESSAGES/messages.po create mode 100644 iati_datastore/iatilib/translations/pt/LC_MESSAGES/messages.po mode change 100644 => 100755 requirements.txt mode change 100644 => 100755 requirements_dev.txt diff --git a/.gitignore b/.gitignore index d4cb36bd..ed5ce899 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ /iati_datastore/iatilib/frontend/docs /iati_datastore/iatilib/frontend/querybuilder /dump.rdb +/iati_datastore/iatilib/messages.pot +/iati_datastore/iatilib/translations/*/LC_MESSAGES/messages.mo # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/README.md b/README.md index 1c8a8d32..1a3d5343 100644 --- a/README.md +++ b/README.md @@ -347,3 +347,22 @@ Then in the 2 requirements*.txt files, look for the line: And edit them to: -e iati_datastore + +I18N - Flask Application +------------------------ + + cd iati_datastore/iatilib + +To add a new locale: + + pybabel extract -F babel.cfg -o messages.pot . + pybabel init -i messages.pot -d translations -l fr + +If strings change in app and you want to reparse the app for new strings, run: + + pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot . + pybabel update -i messages.pot -d translations + +When .po files change with new content, or when deploying the app: + + pybabel compile -d translations diff --git a/fabfile.py b/fabfile.py index 90b3987d..8743bc5e 100644 --- a/fabfile.py +++ b/fabfile.py @@ -22,6 +22,8 @@ def deploy(conn): conn.run('iati db upgrade') # build the docs conn.run('iati build-docs') + # create translations + conn.run('(cd iati_datastore/iatilib && pybabel compile -d translations)') # build the query builder conn.run('iati build-query-builder --deploy-url https://datastore.codeforiati.org') # webserver diff --git a/iati_datastore/iatilib/babel.cfg b/iati_datastore/iatilib/babel.cfg new file mode 100644 index 00000000..fe6ef690 --- /dev/null +++ b/iati_datastore/iatilib/babel.cfg @@ -0,0 +1,7 @@ +[extractors] +csv_column_headings = iatilib.frontend.serialize.babel:extract_csv_column_headings + +[csv_column_headings: frontend/serialize/csv.py] + +[python: **.py] + diff --git a/iati_datastore/iatilib/frontend/api1.py b/iati_datastore/iatilib/frontend/api1.py index d8a5f2f9..01f3c83f 100644 --- a/iati_datastore/iatilib/frontend/api1.py +++ b/iati_datastore/iatilib/frontend/api1.py @@ -287,6 +287,7 @@ def validate_args(self): if not hasattr(self, "_valid_args"): args = MultiDict(request.args) args.pop("ref", None) + args.pop("locale", None) self._valid_args = validators.activity_api_args(args) return self._valid_args diff --git a/iati_datastore/iatilib/frontend/app.py b/iati_datastore/iatilib/frontend/app.py index 4615840a..d72bb69e 100644 --- a/iati_datastore/iatilib/frontend/app.py +++ b/iati_datastore/iatilib/frontend/app.py @@ -1,4 +1,5 @@ -from flask import Flask, render_template +from flask import Flask, render_template, request +from flask_babel import Babel from flask_cors import CORS from iatilib import db, rq, migrate @@ -13,6 +14,8 @@ def create_app(config_object='iatilib.config.Config'): app = Flask(__name__.split('.')[0]) app.config.from_object(config_object) + babel = Babel(app, configure_jinja=False) + babel.localeselector(get_locale) register_extensions(app) register_blueprints(app) register_error_handlers(app) @@ -40,3 +43,7 @@ def register_error_handlers(app): for code in (500, 501, 502, 503, 504): app.register_error_handler( code, lambda x: (render_template('error/5xx.html'), code)) + + +def get_locale(): + return request.args.get("locale", "en") diff --git a/iati_datastore/iatilib/frontend/serialize/babel.py b/iati_datastore/iatilib/frontend/serialize/babel.py new file mode 100644 index 00000000..a26dc59a --- /dev/null +++ b/iati_datastore/iatilib/frontend/serialize/babel.py @@ -0,0 +1,19 @@ +from .csv import _activity_fields, _activity_by_country_fields, _activity_by_sector_fields, \ + _transaction_fields, _transaction_by_country_fields, _transaction_by_sector_fields, \ + _budget_fields, _budget_by_country_fields, _budget_by_sector_fields + + +def extract_csv_column_headings(fileobj, keywords, comment_tags, options): + out = [] + list_names = [ + '_activity_fields','_activity_by_country_fields','_activity_by_sector_fields', + '_transaction_fields','_transaction_by_country_fields','_transaction_by_sector_fields', + '_budget_fields','_budget_by_country_fields','_budget_by_sector_fields', + ] + for list_name in list_names: + for x in globals()[list_name]: + if isinstance(x, tuple): + out.append((1, '', x[0], ['A CSV/Excel column header; in '+list_name])) + else: + out.append((1, '', x, ['A CSV/Excel column header; in '+list_name])) + return iter(out) diff --git a/iati_datastore/iatilib/frontend/serialize/csv.py b/iati_datastore/iatilib/frontend/serialize/csv.py index 5241035e..ea378ce4 100644 --- a/iati_datastore/iatilib/frontend/serialize/csv.py +++ b/iati_datastore/iatilib/frontend/serialize/csv.py @@ -7,6 +7,7 @@ from iatilib import codelists from pyexcelerate import Workbook from openpyxl_copy.utils import get_column_letter +from flask_babel import gettext def total(column): @@ -414,7 +415,7 @@ def line(row): writer = unicodecsv.writer(out) writer.writerow(row) return out.getvalue() - yield line(self.fields_by_major_version['1'].keys()) + yield line([gettext(label) for label in self.fields_by_major_version['1'].keys()]) get_major_version = self.get_major_version for obj in data.items: row = [accessor(obj) for accessor in self.fields_by_major_version[get_major_version(obj)].values()] @@ -436,7 +437,7 @@ def __call__(self, data, wrapped=True): wb = Workbook() ws = wb.new_sheet("data") # Headers - headers = self.fields_by_major_version['1'].keys() + headers = [gettext(label) for label in self.fields_by_major_version['1'].keys()] final_column = get_column_letter(len(headers)) ws.range("A1", final_column+"1").value = [headers] # Data diff --git a/iati_datastore/iatilib/test/__init__.py b/iati_datastore/iatilib/test/__init__.py index 3d8d1818..28a436ad 100644 --- a/iati_datastore/iatilib/test/__init__.py +++ b/iati_datastore/iatilib/test/__init__.py @@ -28,6 +28,30 @@ class TestConfig(Config): RQ_CONNECTION_CLASS = "fakeredis.FakeStrictRedis" +class AppTestCaseNoDb(unittest.TestCase): + def __init__(self, methodName='runTest'): + super().__init__(methodName) + self.addTypeEqualityFunc(lxml_etree.Element, self.assertXMLEqual) + self.addTypeEqualityFunc(xml_etree.Element, self.assertXMLEqual) + + def setUp(self): + global _app + if _app is None: + _app = create_app(TestConfig) + _app.app_context().push() + + self.app = _app + if os.environ.get("SA_ECHO", "False") == "True": + db.engine.echo = True + + def assertXMLEqual(self, x1, x2, msg=None): + sio = StringIO() + if not xml_compare(x1, x2, sio.write): + if msg is None: + msg = sio.getvalue() + raise self.failureException(msg) + + class AppTestCase(unittest.TestCase): def __init__(self, methodName='runTest'): super().__init__(methodName) diff --git a/iati_datastore/iatilib/test/test_serializers/__init__.py b/iati_datastore/iatilib/test/test_serializers/__init__.py index cddd558c..662f9dfd 100644 --- a/iati_datastore/iatilib/test/test_serializers/__init__.py +++ b/iati_datastore/iatilib/test/test_serializers/__init__.py @@ -13,7 +13,8 @@ def load_csv(data): class CSVTstMixin(object): def process(self, data): - csv_str = u"".join(self.serialize(TestWrapper(data, 0, 0, 0))).encode('utf-8') + with self.app.test_request_context('/'): + csv_str = u"".join(self.serialize(TestWrapper(data, 0, 0, 0))).encode('utf-8') return load_csv(csv_str) def serialize(self, data): diff --git a/iati_datastore/iatilib/test/test_serializers/test_csv_activities.py b/iati_datastore/iatilib/test/test_serializers/test_csv_activities.py index 25c9ed5d..544455b0 100644 --- a/iati_datastore/iatilib/test/test_serializers/test_csv_activities.py +++ b/iati_datastore/iatilib/test/test_serializers/test_csv_activities.py @@ -1,18 +1,17 @@ import datetime import inspect -from unittest import TestCase from collections import namedtuple from . import CSVTstMixin as _CSVTstMixin -from iatilib.test import factories as fac +from iatilib.test import factories as fac, AppTestCaseNoDb from iatilib.frontend import serialize from iatilib import codelists as cl -class TestCSVStream(TestCase): +class TestCSVStream(AppTestCaseNoDb): def test_stream(self): self.assertTrue(inspect.isgenerator(serialize.csv([]))) @@ -22,7 +21,7 @@ def serialize(self, data): return serialize.csv(data) -class TestCSVSerializer(CSVTstMixin, TestCase): +class TestCSVSerializer(CSVTstMixin, AppTestCaseNoDb): def test_empty(self): data = self.process([]) self.assertEquals(0, len(data)) @@ -72,7 +71,7 @@ def test_no_description(self): self.assertField({"description": ""}, data[0]) -class TestCSVExample(CSVTstMixin, TestCase): +class TestCSVExample(CSVTstMixin, AppTestCaseNoDb): # these tests are based around an example from IATI # https://docs.google.com/a/okfn.org/spreadsheet/ccc?key=0AqR8dXc6Ji4JdHJIWDJtaXhBV0IwOG56N0p1TE04V2c#gid=4 @@ -492,7 +491,7 @@ def test_column_list(self): cl2 = cl.by_major_version['2'] -class TestCSVExample2(CSVTstMixin, TestCase): +class TestCSVExample2(CSVTstMixin, AppTestCaseNoDb): def test_sector_vocabulary(self): data = self.process([fac.ActivityFactory.build( sector_percentages=[ @@ -621,7 +620,7 @@ def example(self): return activity -class TestActivityByCountry(CSVTstMixin, ActivityExample, TestCase): +class TestActivityByCountry(CSVTstMixin, ActivityExample, AppTestCaseNoDb): def serialize(self, data): return serialize.csv_activity_by_country(data) @@ -787,7 +786,7 @@ def test_total_commitment(self): self.assertField({"total-Commitment": u"130000"}, data[0]) -class TestActivityBySector(CSVTstMixin, ActivityExample, TestCase): +class TestActivityBySector(CSVTstMixin, ActivityExample, AppTestCaseNoDb): def serialize(self, data): return serialize.csv_activity_by_sector(data) @@ -963,68 +962,68 @@ def test_many_currencies(self): self.assertField({self.csv_field: "!Mixed currency"}, data[0]) -class TestTotalDisbursement(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalDisbursement(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): transaction_type = cl.TransactionType.disbursement transaction_code = "D" csv_field = "total-Disbursement" -class TestTotalExpenditure(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalExpenditure(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): transaction_type = cl.TransactionType.expenditure csv_field = "total-Expenditure" -class TestTotalIncomingFunds(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalIncomingFunds(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): transaction_type = cl.TransactionType.incoming_funds csv_field = "total-Incoming Funds" -class TestTotalInterestRepayment(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalInterestRepayment(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): transaction_type = cl.TransactionType.interest_repayment csv_field = "total-Interest Repayment" -class TestTotalLoanRepayment(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalLoanRepayment(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): transaction_type = cl.TransactionType.loan_repayment csv_field = "total-Loan Repayment" -class TestTotalReimbursement(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalReimbursement(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): transaction_type = cl.TransactionType.reimbursement csv_field = "total-Reimbursement" -class TestTotalDisbursement2(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalDisbursement2(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): cl = cl2 transaction_type = cl2.TransactionType.disbursement csv_field = "total-Disbursement" -class TestTotalExpenditure2(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalExpenditure2(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): cl = cl2 transaction_type = cl2.TransactionType.expenditure csv_field = "total-Expenditure" -class TestTotalIncomingFunds2(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalIncomingFunds2(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): cl = cl2 transaction_type = cl2.TransactionType.incoming_funds csv_field = "total-Incoming Funds" -class TestTotalInterestRepayment2(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalInterestRepayment2(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): cl = cl2 transaction_type = cl2.TransactionType.interest_payment csv_field = "total-Interest Repayment" -class TestTotalLoanRepayment2(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalLoanRepayment2(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): cl = cl2 transaction_type = cl2.TransactionType.loan_repayment csv_field = "total-Loan Repayment" -class TestTotalReimbursement2(CSVTstMixin, TotalFieldMixin, TestCase): +class TestTotalReimbursement2(CSVTstMixin, TotalFieldMixin, AppTestCaseNoDb): cl = cl2 transaction_type = cl2.TransactionType.reimbursement csv_field = "total-Reimbursement" diff --git a/iati_datastore/iatilib/test/test_serializers/test_csv_budgets.py b/iati_datastore/iatilib/test/test_serializers/test_csv_budgets.py index b93b3350..1ff8a06d 100644 --- a/iati_datastore/iatilib/test/test_serializers/test_csv_budgets.py +++ b/iati_datastore/iatilib/test/test_serializers/test_csv_budgets.py @@ -1,10 +1,9 @@ import datetime -from unittest import TestCase from collections import namedtuple from . import CSVTstMixin as _CSVTstMixin -from iatilib.test import factories as fac +from iatilib.test import factories as fac, AppTestCaseNoDb from iatilib.frontend import serialize from iatilib import codelists as cl @@ -70,7 +69,7 @@ def example(): return activity -class TestCSVBudgetExample(TestCase, CSVTstMixin): +class TestCSVBudgetExample(AppTestCaseNoDb, CSVTstMixin): # See example here: https://docs.google.com/a/okfn.org/spreadsheet/ccc?key=0AqR8dXc6Ji4JdHJIWDJtaXhBV0IwOG56N0p1TE04V2c&usp=sharing#gid=5 def test_start(self): data = self.process([ @@ -208,7 +207,7 @@ def test_sector_percentage(self): self.assertField({"sector-percentage": "20"}, data[0]) -class TestBudgetByCountry(TestCase, CSVTstMixin): +class TestBudgetByCountry(AppTestCaseNoDb, CSVTstMixin): def serialize(self, data): return serialize.csv_budget_by_country(data) @@ -252,7 +251,7 @@ def test_identifier(self): self.assertField({"iati-identifier": "GB-1-123"}, data[2]) -class TestBudgetBySector(TestCase, CSVTstMixin): +class TestBudgetBySector(AppTestCaseNoDb, CSVTstMixin): def serialize(self, data): return serialize.csv_budget_by_sector(data) diff --git a/iati_datastore/iatilib/test/test_serializers/test_csv_transactions.py b/iati_datastore/iatilib/test/test_serializers/test_csv_transactions.py index d8d79ceb..70611b90 100644 --- a/iati_datastore/iatilib/test/test_serializers/test_csv_transactions.py +++ b/iati_datastore/iatilib/test/test_serializers/test_csv_transactions.py @@ -1,9 +1,8 @@ import datetime -from unittest import TestCase from collections import namedtuple from . import CSVTstMixin as _CSVTstMixin -from iatilib.test import factories as fac +from iatilib.test import factories as fac, AppTestCaseNoDb from iatilib.frontend import serialize from iatilib import codelists as cl @@ -65,7 +64,7 @@ def example(): return activity -class TestCSVTransactionExample(TestCase, CSVTstMixin): +class TestCSVTransactionExample(AppTestCaseNoDb, CSVTstMixin): def test_column_list(self): data = self.process([ fac.TransactionFactory.build() @@ -630,7 +629,7 @@ def test_default_tied_status(self): cl2 = cl.by_major_version['2'] -class TestCSVTransactionExample2(TestCase, CSVTstMixin): +class TestCSVTransactionExample2(AppTestCaseNoDb, CSVTstMixin): def test_transaction_sector_vocabulary(self): data = self.process([fac.TransactionFactory.build( sector_percentages=[ @@ -727,7 +726,7 @@ def test_extending_org(self): self.assertField({"participating-org-type-code (Extending)": "60"}, data[0]) -class TestTransactionByCountry(TestCase, CSVTstMixin): +class TestTransactionByCountry(AppTestCaseNoDb, CSVTstMixin): def serialize(self, data): return serialize.csv_transaction_by_country(data) @@ -761,7 +760,7 @@ def test_identifier(self): self.assertField({"iati-identifier": "GB-1-123"}, data[2]) -class TestTransactionBySector(TestCase, CSVTstMixin): +class TestTransactionBySector(AppTestCaseNoDb, CSVTstMixin): def serialize(self, data): return serialize.csv_transaction_by_sector(data) diff --git a/iati_datastore/iatilib/translations/fr/LC_MESSAGES/messages.po b/iati_datastore/iatilib/translations/fr/LC_MESSAGES/messages.po new file mode 100644 index 00000000..f84187f2 --- /dev/null +++ b/iati_datastore/iatilib/translations/fr/LC_MESSAGES/messages.po @@ -0,0 +1,828 @@ +# French translations for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-07-20 15:19+0000\n" +"PO-Revision-Date: 2022-05-18 10:34+0000\n" +"Last-Translator: FULL NAME \n" +"Language: fr\n" +"Language-Team: fr \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.1\n" + +#: crawler.py:175 +msgid "Duplicate identifier {0} in same resource document" +msgstr "" + +#: parse.py:135 +msgid "" +"Failed to import a valid reporting-org.type in activity {0}, error was: " +"{1}" +msgstr "" + +#: parse.py:157 +msgid "" +"Failed to import a valid sector percentage:{0} in activity {1}, error " +"was: {2}" +msgstr "" + +#: parse.py:258 parse.py:501 +msgid "Failed to import a valid {0} in activity {1}, error was: {2}" +msgstr "" + +#: parse.py:273 +msgid "Failed to import a valid transaction in activity {0}, error was: {1}" +msgstr "" + +#: parse.py:297 +msgid "uFailed to import a valid {0} in activity {1}, error was: {2}" +msgstr "" + +#: parse.py:343 +msgid "uFailed to import a valid budget:{0} in activity {1}, error was: {2}" +msgstr "" + +#: parse.py:377 +msgid "Failed to import a valid related-activity in activity {0}, error was: {1}" +msgstr "" + +#: parse.py:535 +msgid "Failed to import a valid Activity error was: {0}" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "iati-identifier" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "hierarchy" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "last-updated-datetime" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-language" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "reporting-org" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "reporting-org-ref" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "reporting-org-type" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "reporting-org-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "title" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "description" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "activity-status-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "start-planned" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "end-planned" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "start-actual" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "end-actual" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org (Accountable)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-ref (Accountable)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type (Accountable)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type-code (Accountable)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org (Funding)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-ref (Funding)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type (Funding)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type-code (Funding)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org (Extending)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-ref (Extending)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type (Extending)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type-code (Extending)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org (Implementing)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-ref (Implementing)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type (Implementing)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type-code (Implementing)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-country-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-country" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-country-percentage" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-region-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-region" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-region-percentage" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector-percentage" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector-vocabulary" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector-vocabulary-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "collaboration-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-finance-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-flow-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-aid-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-tied-status-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-currency" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "currency" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Commitment" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Disbursement" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Expenditure" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Incoming Funds" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Interest Repayment" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Loan Repayment" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Reimbursement" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction-type" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction-date" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction-value" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_ref" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_value_currency" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_value_value-date" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_provider-org" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_provider-org_ref" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_provider-org_provider-activity-id" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_receiver-org" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_receiver-org_ref" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_receiver-org_receiver-activity-id" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_description" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_flow-type_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_finance-type_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_aid-type_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_tied-status_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_disbursement-channel_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_recipient-country-code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_recipient-country" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_recipient-region-code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_recipient-region" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_sector-code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_sector" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_sector-vocabulary" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_sector-vocabulary-code" +msgstr "" + +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "budget-period-start-date" +msgstr "" + +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "budget-period-end-date" +msgstr "" + +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "budget-value" +msgstr "" + +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "budget-type" +msgstr "" + diff --git a/iati_datastore/iatilib/translations/pt/LC_MESSAGES/messages.po b/iati_datastore/iatilib/translations/pt/LC_MESSAGES/messages.po new file mode 100644 index 00000000..deb09091 --- /dev/null +++ b/iati_datastore/iatilib/translations/pt/LC_MESSAGES/messages.po @@ -0,0 +1,828 @@ +# Portuguese translations for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-07-20 15:19+0000\n" +"PO-Revision-Date: 2022-05-18 10:35+0000\n" +"Last-Translator: FULL NAME \n" +"Language: pt\n" +"Language-Team: pt \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.1\n" + +#: crawler.py:175 +msgid "Duplicate identifier {0} in same resource document" +msgstr "" + +#: parse.py:135 +msgid "" +"Failed to import a valid reporting-org.type in activity {0}, error was: " +"{1}" +msgstr "" + +#: parse.py:157 +msgid "" +"Failed to import a valid sector percentage:{0} in activity {1}, error " +"was: {2}" +msgstr "" + +#: parse.py:258 parse.py:501 +msgid "Failed to import a valid {0} in activity {1}, error was: {2}" +msgstr "" + +#: parse.py:273 +msgid "Failed to import a valid transaction in activity {0}, error was: {1}" +msgstr "" + +#: parse.py:297 +msgid "uFailed to import a valid {0} in activity {1}, error was: {2}" +msgstr "" + +#: parse.py:343 +msgid "uFailed to import a valid budget:{0} in activity {1}, error was: {2}" +msgstr "" + +#: parse.py:377 +msgid "Failed to import a valid related-activity in activity {0}, error was: {1}" +msgstr "" + +#: parse.py:535 +msgid "Failed to import a valid Activity error was: {0}" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "iati-identifier" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "hierarchy" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "last-updated-datetime" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-language" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "reporting-org" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "reporting-org-ref" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "reporting-org-type" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "reporting-org-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "title" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "description" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "activity-status-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "start-planned" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "end-planned" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "start-actual" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "end-actual" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org (Accountable)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-ref (Accountable)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type (Accountable)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type-code (Accountable)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org (Funding)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-ref (Funding)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type (Funding)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type-code (Funding)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org (Extending)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-ref (Extending)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type (Extending)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type-code (Extending)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org (Implementing)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-ref (Implementing)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type (Implementing)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "participating-org-type-code (Implementing)" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-country-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-country" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-country-percentage" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-region-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-region" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "recipient-region-percentage" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector-percentage" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector-vocabulary" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "sector-vocabulary-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "collaboration-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-finance-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-flow-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-aid-type-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-tied-status-code" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "default-currency" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "currency" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Commitment" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Disbursement" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Expenditure" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Incoming Funds" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Interest Repayment" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Loan Repayment" +msgstr "" + +#. A CSV/Excel column header; in _activity_fields +#. A CSV/Excel column header; in _activity_by_country_fields +#. A CSV/Excel column header; in _activity_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "total-Reimbursement" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction-type" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction-date" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction-value" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_ref" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_value_currency" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_value_value-date" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_provider-org" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_provider-org_ref" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_provider-org_provider-activity-id" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_receiver-org" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_receiver-org_ref" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_receiver-org_receiver-activity-id" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_description" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_flow-type_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_finance-type_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_aid-type_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_tied-status_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_disbursement-channel_code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_recipient-country-code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_recipient-country" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_recipient-region-code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_recipient-region" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_sector-code" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_sector" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_sector-vocabulary" +msgstr "" + +#. A CSV/Excel column header; in _transaction_fields +#. A CSV/Excel column header; in _transaction_by_country_fields +#. A CSV/Excel column header; in _transaction_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "transaction_sector-vocabulary-code" +msgstr "" + +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "budget-period-start-date" +msgstr "" + +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "budget-period-end-date" +msgstr "" + +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "budget-value" +msgstr "" + +#. A CSV/Excel column header; in _budget_fields +#. A CSV/Excel column header; in _budget_by_country_fields +#. A CSV/Excel column header; in _budget_by_sector_fields +#: frontend/serialize/csv.py:1 +msgid "budget-type" +msgstr "" + diff --git a/iati_datastore/query_builder_source/pages/index.vue b/iati_datastore/query_builder_source/pages/index.vue index 45adb352..fdd72b0b 100644 --- a/iati_datastore/query_builder_source/pages/index.vue +++ b/iati_datastore/query_builder_source/pages/index.vue @@ -594,6 +594,7 @@ export default { _urlQueryFilters.push(['limit', '1']) } _urlQueryFilters.push(['ref', 'qb']) + _urlQueryFilters.push(['locale', this.$i18n.locale]) const _params = _urlQueryFilters.map(item => { return `${item[0]}=${item[1]}` }).join("&") diff --git a/iati_datastore/setup.py b/iati_datastore/setup.py index 281840d0..a871d6cb 100644 --- a/iati_datastore/setup.py +++ b/iati_datastore/setup.py @@ -24,6 +24,7 @@ sentry-sdk[flask]==1.3.1 docutils==0.17.1 PyExcelerate==0.10.0 +Flask-Babel==2.0.0 """ tests_require = """ diff --git a/requirements.txt b/requirements.txt old mode 100644 new mode 100755 index 51711a4e..aa7e6e11 --- a/requirements.txt +++ b/requirements.txt @@ -11,7 +11,9 @@ alabaster==0.7.12 alembic==1.7.7 # via flask-migrate babel==2.10.1 - # via sphinx + # via + # flask-babel + # sphinx blinker==1.4 # via sentry-sdk certifi==2022.5.18.1 @@ -38,12 +40,15 @@ docutils==0.17.1 flask==1.1.2 # via # -r requirements.in + # flask-babel # flask-cors # flask-migrate # flask-rq2 # flask-sqlalchemy # iati-datastore # sentry-sdk +flask-babel==2.0.0 + # via iati-datastore flask-cors==3.0.9 # via # -r requirements.in @@ -93,6 +98,7 @@ jinja2==3.0.3 # via # -r requirements.in # flask + # flask-babel # pyexcelerate # sphinx lxml==4.6.2 @@ -131,7 +137,9 @@ python-dateutil==2.8.1 # iati-datastore # rq-scheduler pytz==2022.1 - # via babel + # via + # babel + # flask-babel redis==3.5.3 # via # -r requirements.in diff --git a/requirements_dev.txt b/requirements_dev.txt old mode 100644 new mode 100755 index 67afdb2d..7008797e --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -17,6 +17,7 @@ alembic==1.7.7 babel==2.10.1 # via # -r requirements.txt + # flask-babel # sphinx blinker==1.4 # via @@ -70,12 +71,17 @@ fakeredis==1.4.5 flask==1.1.2 # via # -r requirements.txt + # flask-babel # flask-cors # flask-migrate # flask-rq2 # flask-sqlalchemy # iati-datastore # sentry-sdk +flask-babel==2.0.0 + # via + # -r requirements.txt + # iati-datastore flask-cors==3.0.9 # via # -r requirements.txt @@ -134,6 +140,7 @@ jinja2==3.0.3 # via # -r requirements.txt # flask + # flask-babel # pyexcelerate # sphinx lxml==4.6.2 @@ -195,6 +202,7 @@ pytz==2022.1 # via # -r requirements.txt # babel + # flask-babel redis==3.5.3 # via # -r requirements.txt